我不知道这是不是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);
}
。
答案 0 :(得分:2)
是的,问题是3.2无法用Float
准确表示。它实际上也不能由Double
,但错误足够小以至于它被丢弃。
方便的参考资料: