将double分成整数和小数部分

时间:2012-10-24 06:40:56

标签: java math

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

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

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

使用此方法可以得到以下值:

integer = 24
decimal = 0.3999999999999986

我需要十进制值为4。

如何解决这个问题?

11 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:5)

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

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

如果您想进一步了解double不准确的问题,您应该阅读更多关于floating points arithmeticsthis 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