Java 当算术表达式有浮点时,为什么%给出不同的答案?
我最近开始学习java,这个问题一直困扰着我Java 当算术表达式有浮点时,为什么%给出不同的答案?,java,operators,modular-arithmetic,Java,Operators,Modular Arithmetic,我最近开始学习java,这个问题一直困扰着我 class Example{ public static void main(String args[]){ double d; d=4.1 % 1.1; System.out.println("4.1%1.1 : "+d); d=5.5 % 1.1; System.out.println("5.5%1.1 : "+d); }
class Example{
public static void main(String args[]){
double d;
d=4.1 % 1.1;
System.out.println("4.1%1.1 : "+d);
d=5.5 % 1.1;
System.out.println("5.5%1.1 : "+d);
}
}
上述程序的输出为
4.1%1.1:0.799999994和
5.5%1.1:1.099999996
但是当我们手工计算时,第一个得到0.8,第二个得到0。。。为什么会发生这种情况
%在表达式中使用整数时给出正确答案
class Example{
public static void main(String args[]){
int x;
x=10%17;
System.out.println("10%17 : "+x); **//prints 10**
}
}
有人能解释一下这里到底发生了什么吗?你读过吗?
.1
是一个无休止的二进制分数。但是计算机确实使用固定宽度的数字进行计算,因此任何使用.1
的计算肯定是错误的。模告诉你除法的剩余部分。4.1/1.1
的其余部分为0.8
:1.1*3=3.3;4.1-3.3=0.8
@反斜杠谢谢你给我看。。我mistyped@TimothyTruckle隐马尔可夫模型。。是这样吗。。我会参考你提供的网页。。感谢您阅读?.1
是二进制中的一个无穷分数。但是计算机确实使用固定宽度的数字进行计算,因此任何使用.1
的计算肯定是错误的。模告诉你除法的剩余部分。4.1/1.1
的其余部分为0.8
:1.1*3=3.3;4.1-3.3=0.8
@反斜杠谢谢你给我看。。我mistyped@TimothyTruckle隐马尔可夫模型。。是这样吗。。我会参考你提供的网页。。谢谢