Java 四舍五入 五舍六入
- Double dd=0.125;
- try {
- DecimalFormat df=new DecimalFormat("#.##");
- System.out.println(df.format(dd));
- } catch (RuntimeException e) {
- e.printStackTrace();
- }
- MathContext v = new MathContext(2,RoundingMode.HALF_DOWN);
- BigDecimal a = new BigDecimal("0.875",v);
- System.out.println(a);
- float a1 = 123.2354f;
- float b = (float)(Math.round(a1*100))/100;
- System.out.println(b);
- float ft = 134.3445f;
- int scale = 2;//设置位数
- int roundingMode = 4;//表示四舍五入,可以选择其他舍值方式,例如去尾,等等.
- BigDecimal bd = new BigDecimal((double)ft);
- bd = bd.setScale(scale,roundingMode);
- ft = bd.floatValue();
- System.out.println(ft);
结果为:
0.12
0.87
123.24
134.34
结论:
只有第3,4 种方法实现了真正的四舍五入, 1,2种方法到是“五舍六入”
至于为什么会这样?java是有解释的,可以查查看,匆忙写下这边就不在解释了。
- package test;
- import java.math.BigDecimal;
- import java.math.MathContext;
- import java.math.RoundingMode;
- import java.text.DecimalFormat;
- public class testFormat {
- public static void main(String[] args) {
- //第1种
- Double dd = 0.125;
- try {
- DecimalFormat df = new DecimalFormat("#.##");
- System.out.println(df.format(dd));
- } catch (RuntimeException e) {
- e.printStackTrace();
- }
- //第2种
- MathContext v = new MathContext(2, RoundingMode.HALF_DOWN);
- BigDecimal a = new BigDecimal("0.875", v);
- System.out.println(a);
- //第3种
- float a1 = 123.2354f;
- float b = (float) (Math.round(a1 * 100)) / 100;
- System.out.println(b);
- //第4种
- float ft = 134.3445f;
- int scale = 2;// 设置位数
- int roundingMode = 4;// 表示四舍五入,可以选择其他舍值方式,例如去尾,等等.
- BigDecimal bd = new BigDecimal((double) ft);
- bd = bd.setScale(scale, roundingMode);
- ft = bd.floatValue();
- System.out.println(ft);
- //第5种
- MathContext v2 = new MathContext(2, RoundingMode.HALF_UP);
- BigDecimal a2 = new BigDecimal("0.875", v2);
- System.out.println(a2);
- }
- }
第2种方法到是“五舍六入” 是因为传入的参数不对,所以出现“五舍六入” ,四舍五入见第5种方法
浙公网安备 33010602011771号