我试图将double分成整数和小数部分
例如,数字24.4应分为24和4。
int integer = (int)number;
double decimal = number-(int)number;
System.out.println(decimal);
使用此方法可以得到以下值:
integer = 24
decimal = 0.3999999999999986
我需要十进制值为4。
如何解决这个问题?
答案 0 :(得分:9)
你可以做一个字符串split(...)
。然后是Integer parseInt(...)
以获取两个整数组件。
答案 1 :(得分:5)
这是因为double
s并不完全是“实数” - 记住在任何范围内都有无限数量的实数,而double
中只有有限数量的数字 - 因此有限值的数量,因此必须发生一些舍入。
事实是,24.4不能用double
准确表示 - 所以你的数字的分数确实是0.3999左右......
如果你想要一个精确的解决方案 - 你应该使用一个库来为你提供精确的小数值,例如BigDecimal
。
如果您想进一步了解double
不准确的问题,您应该阅读更多关于floating points arithmetics和this article的内容,尽管高级别也是必须的为了真正理解发生了什么。
如果你还不能理解这些文章 - 只需要考虑:如果你需要一个确切的值 - double
s无法提供它 - 如果是这种情况你应该使用一个库。
答案 2 :(得分:5)
根据小数位数,您可以使用此方法:
double number = 24.4;
int integer = (int)number;
double decimal = (10 * number - 10 * integer)/10;
System.out.println(decimal);
解释:删除小数点,进行减法,最后将小数点返回原来的位置!
答案 3 :(得分:2)
![这是我的解决方案] [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 整数第24部分
十进制部分559999488
答案 4 :(得分:1)
这是我写的一个小方法来实现这个目标:
/**
*
* @param n
* @return
*/
private static double getFractionalPart(double n) {
if (n > 0) {
return n - Math.floor(n);
} else {
return ((n - Math.ceil(n)) * -1);
}
}
答案 5 :(得分:1)
double number = 20.57;
Double.valueOf(String.valueOf(number)).intValue()
答案 6 :(得分:1)
float number = (float) 22.45;
int integer = (int)number;
double decimal = number-integer;
System.out.println(integer + "decimal" + decimal);
答案 7 :(得分:0)
首先找到小数点后面的数字,并且必须乘以那么多的10。例如:x = 26.78621然后乘以100000 [这里你不能像x * 10那样相乘,再次x * 10等等(5次),第一次乘以10,它会给你267.862199999 ..]乘法后从结果中减去2600000。这是你的答案的链接,我已经编码了。 https://stackoverflow.com/a/18517555/2508414
答案 8 :(得分:0)
正如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);
答案 9 :(得分:0)
你可以这样做:
(val - val.longValue()) * 100
使用1000得到3个分数:
例如:
(1.2445 - 1) * 100 = 0.244
答案 10 :(得分:0)
我想出了解决之道,几乎没有解决方法,我确信它适用于所有情况。
代码说明了一切。
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