标题:实数求余
只看楼主
czg123698741
Rank: 2
等 级:论坛游民
帖 子:348
专家分:84
注 册:2009-3-4
结帖率:78.99%
 问题点数:0 回复次数:3 
实数求余
请问一下大家一个问题:
实数求余有一个公式是这样的  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

请问一下高手们这是什么原因啊????
搜索更多相关主题的帖子: 实数 
2009-09-26 23:16
freish
Rank: 6Rank: 6
等 级:贵宾
威 望:23
帖 子:1223
专家分:437
注 册:2007-6-1
得分:0 
计算机是二进制存储方法,没办法确切的表示3.4呗,只能用最接近3.4的计算机能表示的一个数来表示了

[url=http://shop63425653./]/cvbnm/a6/1d/f4/7dd1720119cf3b1dcfb570b467b24051.jpg" border="0" />[/url]
2009-09-27 12:13
czg123698741
Rank: 2
等 级:论坛游民
帖 子:348
专家分:84
注 册:2009-3-4
得分:0 
回复 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
这是有必要将他们这么强转型吗??
2009-09-27 12:40
柠檬可乐
Rank: 4
等 级:业余侠客
威 望:6
帖 子:66
专家分:205
注 册:2009-6-16
得分:0 
a-int(a/b)*b的运算过程是这样的:先求a/b,再将其结果强制转换成int类型,再按正常计算其他的。
123.4%10的计算:123.4/10=12.34,转换成int型得到12,123.4-12×10=3.4

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



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-287032-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.794505 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved