我有一个 double 值,我想将其转换为整数值。但是,双精度值足够大,会导致问题。这是一个例子:
double val1 = 74.1234567890
int val2;
我希望 val2 的值等于741234567890
没有小数点的值。有没有人对如何做到这一点有任何建议?
你想要什么74.1234560000
。如果它总是 10 位,val * 1e10
则转换为适当大的整数类型就可以了。否则,你必须更清楚地定义你想要什么。如果它基于用于初始化的字符串double
,则无法完成;许多不同的字符串可以产生完全相同的内部值,包括如果解释为实数则表示不同值的字符串。在另一个极端,如果您想要最小的整数值,使得该值乘以 10 的某个负幂,正好是浮点数的值......大多数浮点值将需要 52 个十进制数字,结果几乎可以肯定不适合任何本机整数类型。
在 Java 中可以做的一件事是将其解析为字符串,然后去掉点,然后将其解析为 int。
double val1 = 74.1234567890;
String str = String.parse(val1);
str = str.replace(".", "");
int val2 = Integer.parse(str);
请记住,像您这样的转换会导致溢出,因为 double 包含 2 个字(8 个字节)和 int 仅 2 个(4 个字节)
首先,int 只能保存 -2,147,483,648 和 2,147,483,647 之间的值。所以 741234567890 不适合。你需要很长时间(见@Daniel Fischer)
你可以做一个例子:
//silly conversion
double val1 = 74.1234567890;
long val2 = Math.round(val1 * 10000000000);
如果您想支持其他值并想要某种“。” 卸妆,你应该看看为此使用字符串。
将 double 转换为 String 而不是 int。