我正在尝试将 double 分成整数和小数部分
例如,数字 24.4 应该分为 24 和 4。
int integer = (int)number;
double decimal = number-(int)number;
System.out.println(decimal);
使用这种方法给了我以下值:
integer = 24
decimal = 0.3999999999999986
我需要十进制的值为4。
如何解决这个问题?
你可以做一个 String split(...)
。然后 IntegerparseInt(...)
取回两个整数分量。
这是因为double
s 不完全是“实数” - 请记住,在任何范围内都有无限数量的实数,而其中只有有限数量的数字double
- 因此值的数量有限,因此必须进行一些舍入。
事实是,24.4 不能精确表示double
- 所以你的数字的分数实际上是 0.3999 左右......
如果你想要一个精确的解决方案 - 你应该使用一个为你提供精确小数值的库,例如BigDecimal
.
如果您想了解更多关于double
s 不精确的问题 - 您应该阅读更多关于浮点算法的内容,这篇文章虽然很高级,但为了真正理解正在发生的事情,也是必须的。
如果您还不能理解这些文章 - 请考虑:如果您需要一个确切的值 - double
s 无法提供它 - 如果是这种情况,您应该使用库。
根据小数位数,您可以使用以下方法:
double number = 24.4;
int integer = (int)number;
double decimal = (10 * number - 10 * integer)/10;
System.out.println(decimal);
解释:去掉小数点,做减法,最后把小数点放回原来的位置!
float number = (float) 22.45;
int integer = (int)number;
double decimal = number-integer;
System.out.println(integer + "decimal" + decimal);
这是我写的一个小方法来完成这个:
/**
*
* @param n
* @return
*/
private static double getFractionalPart(double n) {
if (n > 0) {
return n - Math.floor(n);
} else {
return ((n - Math.ceil(n)) * -1);
}
}
这是我的解决方案:我使用 C 语言中的一种简单方法将小数拆分为两个不同的整数。
#include<stdio.h>
void main()
{
float x=24.56; int y=(int)x; float z=(x-y)*1000000000; int zd=(int)z;
printf("%lf",x);
printf("\ninteger Part %d\n",y);
printf("\nDecimal Part %d\n",zd);
}
输出
24.559999
integer Part 24
Decimal Part 559999488
我用很少的解决方法找到了方法,我相信它适用于所有情况。
代码说明了一切。
double number = input.nextDouble(); // 234.025
String s = Double.toString(number); // "234.025"
s = "0" + s.substring(s.indexOf(".")); //"0.025"
double decimal = Double.parseDouble(s);// 0.025
int num = (int)number; // 234
System.out.println(decimal + " " + num); //0.025 234
首先找到小数点后的数字,然后你必须乘以这么多的 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);
double number = 20.57;
Double.valueOf(String.valueOf(number)).intValue()
你可以这样做:
(val - val.longValue()) * 100
使用 1000 得到 3 个分数:
例如:
(1.2445 - 1) * 100 = 0.244