【发布时间】:2014-02-24 04:59:17
【问题描述】:
假设我们有一个像这样设置的 BigDecimal 变量,我们不能改变它的创建方式:
BigDecimal num = new BigDecimal(6.0053);
所以我们将在输出后看到以下“漂亮”值:
System.out.println(num); //0053000000000000824229573481716215610504150390625
我发现解决此问题的唯一方法是使用 BigDecimal.valueOf():
System.out.println(BigDecimal.valueOf(num.doubleValue())); //6.0053
但是有更简单的解决方案吗?
提前致谢。
【问题讨论】:
-
不要使用
new BigDecimal(double)构造函数 - 它会创建不精确的值:stackoverflow.com/questions/3829029/… -
好吧,根本问题在于值,它并不代表您希望它代表的内容。你说你不能改变它的创建方式,但你应该真正关注这一点,因为这就是问题的开始。其他任何东西都只是掩盖裂缝。
-
@Natix:不,它创建了非常精确的值——只是不是你可能期望的值。我不同意此处有关“不可预测性”的文档 - 结果是可预测的,但您需要先了解发生了什么。
-
谢谢 Jon,我知道问题出在创作上,并且只对一些快速而肮脏的解决方法感兴趣。
标签: java