想保证精度的同时要求四舍五入的话用BigDecimal.setScaledouble f = 34.232323;
BigDecimal b = new BigDecimal(f);
double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();// b.setScale(2, BigDecimal.ROUND_HALF_UP) 表明四舍五入,保留两位小数
上面是对double类型的处理,如果对float的,则将上面所有的double字段换成float就行
BigDecimal b = new BigDecimal(f);
double f1 = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();// b.setScale(2, BigDecimal.ROUND_HALF_UP) 表明四舍五入,保留两位小数
上面是对double类型的处理,如果对float的,则将上面所有的double字段换成float就行
你也可以用如下的语句看看就知道了
System.out.println(new java.math.BigDecimal(1.45d));
再试一下如下的代码。自己体会
double f1 =new java.math.BigDecimal("1.45").setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();出现的原因:在10进制的有限小数在2进制中很多都是无限循环小数。
String temstr = new DecimalFormat("#########.#").format(d1);
System.out.println(temstr);
有错吗?不行的话如何改?
System.out.println(temstr);