vat*_*ada 3 java json bigdecimal gson
这是我的代码:
System.out.println(GSON.toJson(new BigDecimal(10.12)));
Run Code Online (Sandbox Code Playgroud)
输出是:
10.1199999999999992184029906638897955417633056640625
Run Code Online (Sandbox Code Playgroud)
是否可以限制GSON序列化的BigDecimal值的精度?即我的序列化值的预期输出是:
10.11
Run Code Online (Sandbox Code Playgroud)
这里的问题不是GSON,而是你的BigDecimal价值.
如果使用new BigDecimal(double value)构造函数,则可能会产生不可预测的结果.
如果你看看BigDecima(双值)构造函数文档,它清楚地说:
笔记:
这个构造函数的结果可能有点不可预测.有人可能会假设在Java中编写新的BigDecimal(0.1)会创建一个BigDecimal,它恰好等于0.1(未缩放值为1,标度为1),但它实际上等于0.1000000000000000055511151231257827021181583404541015625.这是因为0.1不能精确地表示为double(或者,就此而言,作为任何有限长度的二进制分数).因此,传递给构造函数的值并不完全等于0.1,尽管有外观.
另一方面,String构造函数是完全可预测的:写入新的BigDecimal("0.1")会创建一个BigDecimal,它正好等于0.1,正如人们所期望的那样.因此,通常建议优先使用String构造函数.
所以最好在这里使用BigDecimal String构造函数:
new BigDecimal("10.12")
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3981 次 |
| 最近记录: |