0

我有一个 double 值,我想将其转换为整数值。但是,双精度值足够大,会导致问题。这是一个例子:

double val1 = 74.1234567890
int val2;

我希望 val2 的值等于741234567890没有小数点的值。有没有人对如何做到这一点有任何建议?

4

4 回答 4

2

你想要什么74.1234560000。如果它总是 10 位,val * 1e10则转换为适当大的整数类型就可以了。否则,你必须更清楚地定义你想要什么。如果它基于用于初始化的字符串double,则无法完成;许多不同的字符串可以产生完全相同的内部值,包括如果解释为实数则表示不同值的字符串。在另一个极端,如果您想要最小的整数值,使得该值乘以 10 的某个负幂,正好是浮点数的值......大多数浮点值将需要 52 个十进制数字,结果几乎可以肯定不适合任何本机整数类型。

于 2012-05-01T13:19:51.000 回答
0

在 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 个字节)

于 2012-05-01T13:16:05.387 回答
0

首先,int 只能保存 -2,147,483,648 和 2,147,483,647 之间的值。所以 741234567890 不适合。你需要很长时间(见@Daniel Fischer)

你可以做一个例子:

//silly conversion
double val1 = 74.1234567890;
long val2 = Math.round(val1 * 10000000000);

如果您想支持其他值并想要某种“。” 卸妆,你应该看看为此使用字符串。

于 2012-05-01T13:16:21.597 回答
-1

将 double 转换为 String 而不是 int。

于 2012-05-01T13:13:35.943 回答