0

假设 n 是一个 Double 类型的变量。

double right=n-(Math.ceil(n)-1);

//Here I am trying to get the right part of the number.

现在如果n=1234.78

然后right=0.7799999999999727

为什么不.78呢?

什么时候

n=1234.89

然后right=0.8900000000001

为什么不89呢?为什么不9999......在这里而不是000000......?

现在假设我想在右边找到数字的总和......就像在我的例子中 1234.89 它的 8+9=17 或 1234.781 它的 7+8+1-16。那么,我该怎么办?

但是我不能使用浮点算术来做到这一点?喜欢

double temp=0.0; 
while(right>0) 
{ 
right=rigth*10; 
temp=Math.floor(right); 
right=right-temp; 
suml+=temp; 
} 

以我上面提到的某种方式?我是java新手。请解释我的问题。这对我会有很大的帮助。谢谢你。

4

2 回答 2

0

浮点在几乎所有语言中的工作方式都相同,您会看到相同的问题。如果你想要你应该使用的小数部分。

double fract = n - (long) n;

我怀疑您使用的公式不适用于负数。(而且速度较慢)

如您所见,这可能会产生舍入误差,因此您需要选择一个精度级别。您可以选择 2 位或 6 位数字。您可以在计算时对值进行四舍五入,但在打印时对其进行四舍五入通常更简单。

System.out.printf("%.2f%n", fract);

0.78这将按您的0.89预期打印。

于 2012-12-14T10:48:58.447 回答
0

嘿,您可以使用以下代码

    double roundTwoDecimals(double d) {
                DecimalFormat twoDForm = new DecimalFormat("#.##");
            return Double.valueOf(twoDForm.format(d));
    }
right=roundTwoDecimals(right);
    System.out.println(right);

你会得到想要的结果。

于 2012-12-14T10:40:01.300 回答