我正在重新审视一个问题(
How to test if numeric conversion will change value?),就我而言,完全解决了.问题是检测特定数值何时会溢出JavaScript的IEEE-754号码类型.上一个问题是使用C#,标记的答案工作完美.
现在我正在做完全相同的任务,但这次在Java中并不起作用. AFAIK,Java使用IEEE-754作为其双重数据类型.所以我应该能够来回传递来强制精确度的丢失,但是它能够进行全程的运行.受此限制,我开始在Java中深入挖掘,现在我真的很困惑.
在C#和Java中,long的最小值和最大值都相同:
long MIN_VALUE = -9223372036854775808L;
long MAX_VALUE = 9223372036854775807L;
AFAIK,由于为指数和符号保留的固定位,这些值在IEEE-754中的可表示数字之外.
// this fails in browsers that have stuck with the pure ECMAScript Number format
var str = Number(-9223372036854775808).toFixed();
if ("-9223372036854775808" !== str) { throw new Error("Overflow!"); }
这在Java中为(value = -9223372036854775808L)返回false:
boolean invalidIEEE754(long value) {
try {
return ((long)((double)value)) != value;
} catch (Exception ex