mathcontext保留2位小数_java - 移动小数位数

如果您使用x / 100或x * 0.01,您应该使用舍入或期望看到一些舍入错误。 如果您不能这样做,请使用0.01。

您遇到的问题是0.1不是精确表示,并且通过执行两次计算,您将复合该错误。

但是,100可以准确表示,所以尝试:

double x = 1234;

x /= 100;

System.out.println(x);

打印:

12.34

这是有效的,因为x / 100代表您执行少量舍入,但它并不多。 如果你想知道它没有四舍五入的样子:

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

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

打印:

0.100000000000000005551115123125782702118158340454101562

12.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.35000000000000003

0.41 != 0.41000000000000003

0.47 != 0.47000000000000003

0.57 != 0.5700000000000001

0.69 != 0.6900000000000001

0.7 != 0.7000000000000001

0.82 != 0.8200000000000001

0.83 != 0.8300000000000001

0.94 != 0.9400000000000001

0.95 != 0.9500000000000001

1.13 != 1.1300000000000001

1.14 != 1.1400000000000001

1.15 != 1.1500000000000001

1.38 != 1.3800000000000001

1.39 != 1.3900000000000001

1.4 != 1.4000000000000001

1.63 != 1.6300000000000001

1.64 != 1.6400000000000001

1.65 != 1.6500000000000001

1.66 != 1.6600000000000001

1.88 != 1.8800000000000001

1.89 != 1.8900000000000001

1.9 != 1.9000000000000001

1.91 != 1.9100000000000001

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值