52 java precision numbers bigdecimal
我正在寻找将数字转换为BigDecimal的最佳方法.
这够好吗?
Number number;
BigDecimal big = new BigDecimal(number.toString());
Run Code Online (Sandbox Code Playgroud)
我们可以用这种toString()方法失去精确度吗?
dav*_*rld 34
这很好,请记住,当它不是String类型时,使用BigDecimal的构造函数声明一个值可能很危险.考虑以下......
BigDecimal valDouble = new BigDecimal(0.35);
System.out.println(valDouble);
Run Code Online (Sandbox Code Playgroud)
这不会打印0.35,它实际上是......
0.34999999999999997779553950749686919152736663818359375
Run Code Online (Sandbox Code Playgroud)
我会说你的解决方案可能是最安全的.
jar*_*bjo 19
我们可以用toString()方法丢失精度吗?
种,两种Float.toString()和Double.toString()只输出的数字的小数分隔,这是需要的输出唯一地以对应于浮动或双值后的数目.
要在david99world的答案中使用0.35示例,请考虑以下代码:
BigDecimal bd1 = new BigDecimal(0.35);
Number n = 0.35;
BigDecimal bd2 = new BigDecimal(n.toString());
System.out.println(bd1);
System.out.println(bd2);
Run Code Online (Sandbox Code Playgroud)
直观的期望可能是两个BigDecimal实例是相同的,但输出显示它们不是:
0.34999999999999997779553950749686919152736663818359375
0.35
Run Code Online (Sandbox Code Playgroud)
第一行是double的精确值,因为0.35无法准确表示.第二行是0.35,因为不需要更多的小数位来表示不同的值.例如,该声明0.34999999999999997779553950749686919152736663818359375 == 0.35将评估为true.
创建BigDecimal时,这实际上并不是精度的损失,不确定性已存在于您的"源"值中.问题在于,使用例如float或double值作为源可能的离散值不一定由BigDecimal实例中的精确等价物表示.
| 归档时间: |
|
| 查看次数: |
92208 次 |
| 最近记录: |