2014-10-19 83 views
0

我不确定这是否是一个错误,如果我刚刚达到GWT的限制,或者我只是愚蠢地创建一个具有如此之高的数字的double。GWT - Double to Long导致错误编号

在做在客户端执行以下操作:

Double d = 10152826455075087d; 
GWT.log("Value is now: " + d.toString()); 

这将打印数量:10152826455075088

这是从Facebook获取和ATM,我把它作为一个长期的ID,但如果这是一个限制,我必须开始将我的ID存储为字符串。

有人可以确认这是一个错误还是限制?另外,如果它是一个错误,我该在哪里报告?

谢谢!

回答

1

这个数字是如此巨大,双精度浮点数比1更高。Epsilon描述了当前和下一个可能数字之间的距离。

试试这个在您的浏览器的控制台:

console.log(10152826455075087); 

它将打印10152826455075088.的JavaScript存储所有号码为双精度浮点数。

+0

谢谢您的确认!我认为GWT在场景中做了一些魔术,将double存储为包含前半部分和后半部分的数组,以便可以转换为Long? :/ – Whyser 2014-10-19 13:09:53

+0

不要担心在客户端将ID存储为字符串,因为您不会将该ID用于数学运算。您不会尝试添加,减去两个ID或将它们相乘,因此对于您来说,它们就是这样:ID,就像电话号码一样。 – Zenorbi 2014-10-19 13:57:05

+0

我并不担心使用String作为ID,它只是更方便地使用Long,因为我所有的实体都有Long ID(使用Objectify和String将不会自动生成ID),但是我将在存储facebook- ID在未来。谢谢! – Whyser 2014-10-19 14:28:47