将double分成整数和小数部分

我试图将double分成整数和小数部分

因此,例如,数字24.4应分为24和4。

int integer = (int)number; double decimal = number-(int)number; System.out.println(decimal); 

使用此方法为我提供以下值:

 integer = 24 decimal = 0.3999999999999986 

我需要十进制的值为4。

如何解决这个问题?

你可以做一个字符串split(...) 。 然后用Integer parseInt(...)取回两个整数组件。

这是因为double s并不完全是“实数” – 记住在任何范围内都有无限数量的实数,而在double中只有有限数量的数字 – 因此有限数量的值,因此必须发生一些舍入。

事实是,24.4不能用double精确表示 – 所以你的数字的分数实际上是0.3999左右……
如果您想要一个精确的解决方案 – 您应该使用一个库,它为您提供精确的小数值,例如BigDecimal

如果你想更多地了解这个double问题并不准确 – 你应该阅读更多关于浮点算术的内容 ,而这篇文章虽然很高,但也是必须的,才能真正理解正在发生的事情。

如果你还不能理解这些文章 – 只需要考虑:如果你需要一个确切的值 – double s不能提供它 – 如果是这种情况你应该使用一个库。

根据小数位数,您可以使用此方法:

 double number = 24.4; int integer = (int)number; double decimal = (10 * number - 10 * integer)/10; System.out.println(decimal); 

说明 :删除小数点,进行减法,最后将小数点返回原始位置!

![这是我的解决方案] [1]

这是我的解决方案。 我在C编程中使用了一个简单的方法将分数分成两个不同的整数…下面是代码

 #include void main() { float x=24.56; int y=(int)x; float z=(xy)*1000000000; int zd=(int)z; printf("%lf",x); printf("\ninteger Part %d\n",y); printf("\nDecimal Part %d\n",zd); } 

产量


24.559999整数第24部分

小数部分559999488

这是我写的一个小方法来完成这个:

 /** * * @param n * @return */ private static double getFractionalPart(double n) { if (n > 0) { return n - Math.floor(n); } else { return ((n - Math.ceil(n)) * -1); } } 
 double number = 20.57; Double.valueOf(String.valueOf(number)).intValue() 

首先找到小数点后面的数字,并且你必须乘以那么多的10。 例如:x = 26.78621然后乘以100000 [这里你不能像x * 10那样相乘,再次x * 10等等(5次),第一次乘以10,它会给你267.862199999 ..]乘法后从结果中减去2600000。 这是你的答案的链接,我已经编码了。 https://stackoverflow.com/a/18517555/2508414

正如RGO所说,你可以这样做,也可以围绕十进制数来获得适当的值。 例如:

 double number = 20.57; int integer = (int)number; double decimal = (10 * number - 10 * integer)/10; double temp = Math.round(decimal*100.0)/100.0; System.out.println("Int = " + integer + "\nDecimal = " + temp); 

你可以这样做:

 (val - val.longValue()) * 100 

使用1000得到3个分数:

例如:

 (1.2445 - 1) * 100 = 0.244 
 float number = (float) 22.45; int integer = (int)number; double decimal = number-integer; System.out.println(integer + "decimal" + decimal);