注册 登录
编程论坛 J2EE论坛

实数求余

czg123698741 发布于 2009-09-26 23:16, 775 次点击
请问一下大家一个问题:
实数求余有一个公式是这样的  a%b的结果为a-(int)(a/b)*b
相对应的例题是123.4%10    其结果是3.4

我出于好奇的心理自己变了个程序试验了一下发现结果并非如此!
代码如下:
</head>
<body>
<%
double x=123.4;
double y=10;
double z=x%y;
out.print("123.4%10 = "+z);
%>
</body>
</html>

运行结果:123.4%10 = 3.4000000000000057

请问一下高手们这是什么原因啊????
3 回复
#2
freish2009-09-27 12:13
计算机是二进制存储方法,没办法确切的表示3.4呗,只能用最接近3.4的计算机能表示的一个数来表示了
#3
czg1236987412009-09-27 12:40
回复 2楼 freish
既然这样为什么我使用double类型会计算出精确呢!书本上的那条公式是不是计算的不精确啊???
后来我自己又验证了一下:后来我将它强转型后对比:
<%
double x=123.4;
double y=10;
double z=x%y;
out.print("使用double型—— 123.4%10 = "+z);
%>
<p>
<%
double k=123.4;
double l=10;
double a=k%l;
float n=(float)a;
out.print("使用float型—— 123.4%10 = "+n);
%>
结果分别是:
使用double型—— 123.4%10 = 3.4000000000000057
这是有必要将他们这么强转型吗??
#4
柠檬可乐2009-09-27 22:29
a-int(a/b)*b的运算过程是这样的:先求a/b,再将其结果强制转换成int类型,再按正常计算其他的。
123.4%10的计算:123.4/10=12.34,转换成int型得到12,123.4-12×10=3.4

在你的程序代码里,并不是这样计算的,只是简单的求余。至于结果,应该是溢出的问题了
1