将double分成整数和小数部分

Ash*_*wal 14 java math

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

例如,数字24.4应分为24和4.

int integer = (int)number;
double decimal = number-(int)number;
System.out.println(decimal); 
Run Code Online (Sandbox Code Playgroud)

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

integer = 24
decimal = 0.3999999999999986
Run Code Online (Sandbox Code Playgroud)

我需要十进制的值为4.

如何解决这个问题?

Oh *_*oon 9

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

  • 这很危险:2.03将被处理为小数部分"3"而不是"03". (27认同)

ami*_*mit 5

这是因为doubles不完全是"实数" - 记住在任何范围内都有无数个实数,而只有有限数量的数字double- 因此有限数量的值,所以必须发生一些舍入.

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

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

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


RGO*_*RGO 5

根据十进制数字的数量,您可以使用此方法:

double number = 24.4;

int integer = (int)number;
double decimal = (10 * number - 10 * integer)/10;

System.out.println(decimal); 
Run Code Online (Sandbox Code Playgroud)

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

  • 超过90%的情况下,该技术失败. (2认同)