四舍五入为什么会这样呢?

oxfordxyc 2002-05-05 01:58:16
我在vb里面调用round()时,对于single型的数据的不到我所要的结果:比如round(1.255,2) 我想得到1.26,可是得到的却是1.25
还有round(1.205,2),我想得到1.20,可是得到的却是1.2,请问这是为什么,难道用什么别的函数可以实现?能给我一个答案吗?谢谢!
...全文
130 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
DanielSunny 2002-05-05
  • 打赏
  • 举报
回复
我以前也碰到过,应该是是看最后一位是基数还是偶数,应该是Bug
water_j 2002-05-05
  • 打赏
  • 举报
回复
是吗!不知是为什么?
laisiwei 2002-05-05
  • 打赏
  • 举报
回复
这不是VB的BUG,微软在做这个函数时并不是作为四舍五入,我记得软件报里说过
冰霜icefrost 2002-05-05
  • 打赏
  • 举报
回复
如果要保留两位的话可不可以这样
Dim s As Single
s = 1.25445
s = s + 0.005
MsgBox Round(s, 2)
好像fortran里是用这种方法处理四舍五入的。
oxfordxyc 2002-05-05
  • 打赏
  • 举报
回复
谢谢各位了,还有其他的方法吗?
jinjun001 2002-05-05
  • 打赏
  • 举报
回复
大哥要精确不如换成货币格式的数字。
water_j 2002-05-05
  • 打赏
  • 举报
回复
好象是VB ROUND的一个BUG!
feihong0233 2002-05-05
  • 打赏
  • 举报
回复
测试了一下,1.255保留两位的确是得到1.25,但是1.2550001得到的就是1.26
能不能这样用:
Dim s As Single
s = 1.25445
s = s + 0.0000001
MsgBox Round(s, 2)
s = 1.255
s = s + 0.0000001
MsgBox Round(s, 2)

还有1.205保留两位的确应该是1.2,想得到1.20那是格式问题啊,
可以用format(round(1.205,2),"0.00")
zyl910 2002-05-05
  • 打赏
  • 举报
回复
浮点舍入错误
按照Intel的说法,计算机算出这样的结果是完全正确的
oxfordxyc 2002-05-05
  • 打赏
  • 举报
回复
好了,我将这个帖子结了,你们可以去我的另一个问题看看
问题:“有那位兄弟知道建筑里面的修约算法?”
我在做一个工程急着用,你们可以帮我的忙吗?非常感谢:)
马上就给分
我想大家来这里也不仅仅是为了分吧,更重要的是交流
tg123 2002-05-05
  • 打赏
  • 举报
回复
这么做
format(".5","#")
shawls 2002-05-05
  • 打赏
  • 举报
回复
计算几中不是四舍五入,是四舍6入
cjhyahoo 2002-05-05
  • 打赏
  • 举报
回复
k=int(i)
cjhyahoo 2002-05-05
  • 打赏
  • 举报
回复
用int ()
feihong0233 2002-05-05
  • 打赏
  • 举报
回复
其实浮点数是有误差的,
1.55可能只是
1.5499999999999
laisiwei 2002-05-05
  • 打赏
  • 举报
回复
1.5 -> 2
2.5 -> 2
3.5 -> 4
4.5 -> 4
5.5 -> 6
6.5 -> 6
这个函数应解释为“四舍六入五成双”,就是这样舍入的,如果最后的是5的话,结果最后一位肯定是偶数。
laisiwei 2002-05-05
  • 打赏
  • 举报
回复
我知道不能,那你用我做的一个函数好了。只能用来保留两位小数。
Public Function sswr(Number As Double)
Dim a As Double
a = Number - Int(Number)
If Mid(a, 4, 1) >= 5 Then
sswr = Mid(a, 1, 3) + Int(Number) + 0.01
Else
If Mid(a, 4, 1) < 5 Then
sswr = Mid(a, 1, 3) + Int(Number)
End If
End If
End Function
oxfordxyc 2002-05-05
  • 打赏
  • 举报
回复
刺猬先生,你试一试就知道能不能得到你想要的结果了 :)
laisiwei 2002-05-05
  • 打赏
  • 举报
回复
Round 函数

描述
返回按指定位数进行四舍五入的数值。
语法
Round(expression[, numdecimalplaces])
Round 函数的语法有以下参数:

参数 描述
expression 必选。进行四舍五入的数值表达式。
numdecimalplaces 可选。数字表明小数点右边有多少位进行四舍五入。如果省略,则 Round 函数返回整数。
oxfordxyc 2002-05-05
  • 打赏
  • 举报
回复
谢谢billj(小金),用format确实是可以实现 :)
加载更多回复(1)

7,785

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧