我想准确地解析一个整数,一个可能根据当前语言环境格式化的整数。如果我没有准确地解析整数,我想知道它。所以我使用:
String string = "1111122222333334444455555";
Locale locale = Locale.getDefault();
NumberFormat numberFormat = NumberFormat.getIntegerInstance(locale);
numberFormat.setParseIntegerOnly();
Number number = numberFormat.parse(string);
显然"1111122222333334444455555"
代表一个很大的数字,比一个Long
可以处理的大。所以NumberFormat
给了我……一个Double
??
我想我会期望收到 aBigInteger
而不是 a Double
,尤其是因为我要求使用特定于整数的数字格式化程序。但没关系;更大的问题是我得到的双倍价值是1.1111222223333344E24
!这不等于1111122222333334444455555
!!
如果NumberFormat
给我的解析值不等于输入字符串中存储的值,我该如何检测?
换句话说:“我怎么知道Double
我得到的值是否NumberFormat
与原始字符串中表示的整数值完全相等?”