如何获取浮点数的小数部分?

53
我需要提取浮点数的小数部分,但是我得到了奇怪的结果:
float n = 22.65f;
// I want x = 0.65f, but...

x = n % 1; // x = 0.6499996

x = n - Math.floor(n); // x = 0.6499996185302734

x = n - (int)n; // x = 0.6499996
为什么会这样?为什么我得到的值是那些值而不是 0.65

1
对于其他被问题描述所迷惑的人,整个讨论串都是在向用户解释,仅仅因为你将22.65作为文字量输入,并不意味着这个数字可以以二进制形式存储。浮点数并没有无限精度,如果你只是打印了n,你仍然会得到6.4999... - TrisT
12个回答

0

这段代码适用于任何数量的小数位。

float f = 2.3445f;
String s = Float.toString(f);
char[] c = s.toCharArray();
int length = s.length();
int flag = 0;
StringBuilder n = new StringBuilder();
for(int i = 0; i < length; i++)
{
    if(flag == 1)
    {
        n.append(c[i]);
    }
    if(c[i] == '.')
    {
        flag = 1;
    }
}
String result = n.toString();
int answer = Integer.parseInt(result);
System.out.println(answer);

0
在Kotlin中,获取不带"0."的小数部分。
    val value = 112.34562
    val decimalPlacesCount = 2
    val decimalPart = (String.format("%.${decimalPlacesCount}f", value).split(".")[1]).toInt()

小数部分的输出将为 -> 34

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接