Ame*_*eya 4 java double json org.json
使用JSONObject读取来自服务器的JSON响应.服务器返回一些十进制数.正常数字不是问题,但是当存在十进制数字形式时会出现问题0.00068.类似0.00068的数字会自动存储到Double对象中,并且当尝试检索此类数字时,返回数字的"计算机化科学记数法",即6.8E4,即使通过getDouble(index)方法或getString(index)方法使用String 访问的数字也是如此.
尝试过这种将double值转换为string的方法,但已经消除了这个tecinique,因为在Double转换为时会添加一些positve舍入BigDecimal.这可以通过在缩放到时舍入集来消除BigDecimal.ROUND_CEILING.但我不希望任何缩放和想要原始值,因为实际值是一个小的十进制数,服务器保证数字不会超过小数点后的6位数.
BigDecimal big = new BigDecimal(new Double(0.00680));
System.out.println(big.toPlainString()); //0.006799999999999999621136392846665330580435693264007568359375
System.out.println(big.setScale(15, BigDecimal.ROUND_DOWN)); //0.006799999999999
Run Code Online (Sandbox Code Playgroud)
可以通过某种方式获得Double的实际字符串值,即没有缩放的数字0.00680,或者我们是否可以阻止JSONObject将数字解释为各自的数字类别.
提前感谢.
与您使用的JSON库无关,您不应该使用带有double参数的BigDecimal构造函数,因为它使用double的二进制浮点值的精确十进制表示
相反,使用静态valueOf方法,因为它使用double的字符串值,因此正确舍入.
当double必须用作BigDecimal的源时,请注意此构造函数提供了精确的转换; 它不会产生与使用该
Double.toString(double)方法将double转换为String 然后使用BigDecimal(String)构造函数相同的结果.要获得该结果,请使用静态valueOf(double)方法.
但是,对于非常大或小的数字,解析为double可能已经引入了舍入错误,在这种情况下,唯一的解决方案是使用支持将数字解析为BigDecimals的不同JSON库.
| 归档时间: |
|
| 查看次数: |
6916 次 |
| 最近记录: |