栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Java将小数位移至两倍

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java将小数位移至两倍

如果使用

double
float
,则应使用舍入或期望看到一些舍入错误。如果你无法执行此操作,请使用
BigDecimal

你遇到的问题是0.1不是精确的表示形式,并且通过执行两次计算,你正在使该错误复杂化。

但是,可以准确表示100,因此请尝试:

double x = 1234;x /= 100;System.out.println(x);

打印:

12.34

之所以有效,是因为Double.toString(d)代表你进行了少量的四舍五入,但是操作并不多。如果你想知道四舍五入后的样子:

System.out.println(new BigDecimal(0.1));System.out.println(new BigDecimal(x));

印刷品:

0.10000000000000000555111512312578270211815834045410156212.339999999999999857891452847979962825775146484375

简而言之,无论你是否显式地进行浮点运算,明智的答案都不可避免地需要四舍五入。

注:

x / 100
x * 0.01
当它涉及到舍入误差是不完全一样的。这是因为第一个表达式的舍入误差取决于
x
的值,而
0.01
第二个表达式中的则具有固定的舍入误差。

for(int i=0;i<200;i++) {    double d1 = (double) i / 100;    double d2 = i * 0.01;    if (d1 != d2)        System.out.println(d1 + " != "+d2);}

版画

0.35 != 0.350000000000000030.41 != 0.410000000000000030.47 != 0.470000000000000030.57 != 0.57000000000000010.69 != 0.69000000000000010.7 != 0.70000000000000010.82 != 0.82000000000000010.83 != 0.83000000000000010.94 != 0.94000000000000010.95 != 0.95000000000000011.13 != 1.13000000000000011.14 != 1.14000000000000011.15 != 1.15000000000000011.38 != 1.38000000000000011.39 != 1.39000000000000011.4 != 1.40000000000000011.63 != 1.63000000000000011.64 != 1.64000000000000011.65 != 1.65000000000000011.66 != 1.66000000000000011.88 != 1.88000000000000011.89 != 1.89000000000000011.9 != 1.90000000000000011.91 != 1.9100000000000001


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/414895.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号