ROUND,四舍五入问题的终极答案 (50分)

to zhtx:
你的结论是错误的,用formatFloat函数不能彻底解决问题的,正确的答案是考虑到负数情况下
的+0.5算法,不信你可以试一下:
RoundFloat(8.4249999,2)=8.42
RoundFloat(8.42499999999999999999999,2)=8.43
 
-0.5555取三位小数怎么会是-0.556呢? 4舍5入啊,-0.5555变大就是-0.555了,这样才是进啊,
如果变成-0.556,那就是变小了,是舍了。 -0.555>-0.556 啊
 
java的java.Math.round函数那是4舍5入,不会按统计方法归到偶数的
它的负数的算法是和我的一样的, 它
-3.5进位,是-3(变大),而不是-4(变小)
-2.5进位,是-2(变大),而不是-3(变小)
 
所以你的 -0.5555 ==> -0.555 我觉得不科学,是变小了,是舍而不是进
 
哈哈,越来越热闹,谢谢楼上各位朋友的参与,没想到这么简单一个问题就有那么多
的答案,头疼啊.
Headchen:这涉及到计算精度,电脑中不可能保存那么多位数,实际还是为8.425,而对浮点
运算四舍五入的问题就是这个原因,表面看是8.245,实际内部就是你写出的那么多位数.
pipi:你说的有道理,我当初也是这么想的,但用户用计算器算出来就是这个结果,而且
我用FOXPRO和EXCEL的ROUND函数也是这个结果.所以我采用最流行的算法,哈哈,媚俗.

 
以上还是有问题:
RoundTo(1.235, -2)结果是:1.23,不是1.24
 
以上RoundTo(1.235, -2)结果是:1.24没错
但:
RoundTo(0.075, -2)结果是:0.07 <--注意大于0.05
RoundTo(0.025, -2)结果是:0.03 <--注意小于0.05

求就!求就!求就!求就!求就!求就!求就!
 
harmer:你这-2什么意思,取-2位小数?是ROUNDTO的特殊用法吗?
 
那怎么解决 RoundFloat(8.42499999999999999999999,2)=8.43 的问题啊?
难道就没有办法吗?各位。
 
iCANK:你实际中会用到这么多位小数位?运算精度有这么高吗?
 
搂上的:
的确实际遇到这种情况的机率很小。

我只是想知道如何处理高精度的算法,Windows自带的计算器精度可以达到32位:
8.424999999999999999999999999999 ,他是怎么运算的?
 
extended和double的有效位数都是19-20位
你的8.424999999999999999999999999999 在编译阶段就给变成 8.425 了
 
接受答案了.
 
0.5也有时会被误认为是0.49999……而舍去,大家有没有碰到此种问题,四舍五入时,又如何区分真假0.49999……呢?
 

Similar threads

I
回复
0
查看
445
import
I
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
517
import
I
顶部