当前位置: 技术问答>java相关
java的四舍五入问题(1.15是1.2;1.45就是1.4?)真是搞不懂,我用的是DecimalFormat的方式(在线等)
来源: 互联网 发布时间:2015-10-15
本文导语: double d1 =1.15; double d2 =1.45; System.out.println( new DecimalFormat("#########.#").format(d1)); System.out.println( new DecimalFormat("#########.#").format(d2)); 输出结果: 1.2 1.4 | 这是因为在浮点表示(float double)时,1.45f 与...
double d1 =1.15;
double d2 =1.45;
System.out.println( new DecimalFormat("#########.#").format(d1));
System.out.println( new DecimalFormat("#########.#").format(d2));
输出结果:
1.2
1.4
double d2 =1.45;
System.out.println( new DecimalFormat("#########.#").format(d1));
System.out.println( new DecimalFormat("#########.#").format(d2));
输出结果:
1.2
1.4
|
这是因为在浮点表示(float double)时,1.45f 与实际的1.45不精确相等。你可以查看有关资料就知道了。
你也可以用如下的语句看看就知道了
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进制中很多都是无限循环小数。
你也可以用如下的语句看看就知道了
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进制中很多都是无限循环小数。