更改为整数时的双值编程问题

时间:2012-05-01 13:10:23

标签: java android c++ c

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

double val1 = 74.1234567890
int val2;

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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个字节)

答案 2 :(得分: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);

如果你想支持其他值并想要一种'。'卸妆,你应该看看使用字符串。

答案 3 :(得分:-1)

将double转换为String而不是int。