假设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的新手。请解释我的问题。这对我来说是一个很大的帮助。谢谢。
答案 0 :(得分:0)
嘿,您可以使用以下代码
double roundTwoDecimals(double d) {
DecimalFormat twoDForm = new DecimalFormat("#.##");
return Double.valueOf(twoDForm.format(d));
}
right=roundTwoDecimals(right);
System.out.println(right);
你会得到理想的结果。
答案 1 :(得分:0)
浮点在几乎所有语言中的工作方式相同,您会看到相同的问题。如果你想要小数部分你应该使用。
double fract = n - (long) n;
我怀疑你使用的公式不适用于负数。 (而且速度较慢)
如您所见,这会产生舍入误差,因此您需要选择一个精度级别。您可以选择2位或6位数。您可以在计算时对值进行舍入,但在打印时将其舍入更为简单。
System.out.printf("%.2f%n", fract);
这将按预期打印0.78
和0.89
。