17

我正在尝试将 double 分成整数和小数部分

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

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

使用这种方法给了我以下值:

integer = 24
decimal = 0.3999999999999986

我需要十进制的值为4。

如何解决这个问题?

4

11 回答 11

9

你可以做一个 String split(...)。然后 IntegerparseInt(...)取回两个整数分量。

于 2012-10-24T06:44:23.977 回答
6

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

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

如果您想了解更多关于doubles 不精确的问题 - 您应该阅读更多关于浮点算法的内容,这篇文章虽然很高级,但为了真正理解正在发生的事情,也是必须的。

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

于 2012-10-24T06:47:24.230 回答
5

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

double number = 24.4;

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

System.out.println(decimal); 

解释:去掉小数点,做减法,最后把小数点放回原来的位置!

于 2012-10-24T07:01:13.633 回答
4
float number = (float) 22.45;
int integer = (int)number;
double decimal = number-integer;
System.out.println(integer + "decimal" + decimal); 
于 2018-04-05T13:23:50.287 回答
3

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

/**
 * 
 * @param n
 * @return 
 */
private static double getFractionalPart(double n) {     
    if (n > 0) {
        return n - Math.floor(n);
    } else {
        return ((n - Math.ceil(n)) * -1);
    }
}
于 2016-09-27T15:01:14.157 回答
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
于 2014-01-23T06:22:52.093 回答
1

我用很少的解决方法找到了方法,我相信它适用于所有情况。

代码说明了一切。

        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
于 2019-06-02T09:03:34.450 回答
0

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

于 2013-09-01T17:36:06.757 回答
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);
于 2017-04-30T01:29:23.393 回答
0
double number = 20.57;
Double.valueOf(String.valueOf(number)).intValue()
于 2017-11-21T11:28:56.957 回答
0

你可以这样做:

(val - val.longValue()) * 100

使用 1000 得到 3 个分数:

例如:

(1.2445 - 1) * 100 = 0.244
于 2017-12-11T22:20:41.217 回答