使用Json.toJson时Float的Incorect值

时间:2015-11-20 09:49:54

标签: json playframework playframework-2.4

我不知道这是不是Play中的错误!或者如果有其他原因,但现在正在发生的事情。

我有一个对象(Json.toJson()),其成员变量类型为Float。

play.libs.Json

使用MyObject(来自MyObject myObj = new MyObj(); myObj.setData(3.2f); )发送包含{ "data": 3.200000047683716 } 项的响应时,值会被加扰。

举个例子:

Double

JSON字符串:

JSON.toJson()

如果我将数据类型更改为Float,一切正常。

我怀疑这可能是因为浮点精度与双精度以及myObj.data如何处理3.2个对象,但是,在调试中,public static void main(String[] args) { System.out.println("shiftwise Example A = " + (0x47494638 << 32)); long someNumber = 0x47494638; long otherNumber = someNumber << 32; System.out.println("shiftwise Example B = " + otherNumber); } public static void main(String[] args) { System.out.println("shiftwise Example A = " + (0x47494638L << 32)); long someNumber = 0x47494638; long otherNumber = someNumber << 32; System.out.println("shiftwise Example B = " + otherNumber); }

1 个答案:

答案 0 :(得分:2)

是的,问题是3.2无法用Float准确表示。它实际上也不能由Double,但错误足够小以至于它被丢弃。

方便的参考资料: