我有一个双重值,我想将其转换为整数值。但是,double值足够大,因此会导致问题。这是一个例子:
double val1 = 74.1234567890
int val2;
我希望val2的值等于没有小数点的741234567890
。有没有人对如何做到这一点有任何建议?
答案 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。