计算器除法问题!(你未必注意过,你也未必可以解决,请走过路过的看看!^_^)(100分)

  • 主题发起人 songbo811031
  • 开始时间
S

songbo811031

Unregistered / Unconfirmed
GUEST, unregistred user!
用delphi编写类似windows计算器的程序,遇到除法问题.如delphi编写的计算器运算10/3=3.3333333333333333333333333333,但是再拿3.33333333333333333333333333*3=9.9999999999999999999999999999999而不像windows计算器除过后再乘的仍然等于10,请问各位大侠,怎么解决,谢谢不吝赐教!
邮箱songbo811031@163.com
 
G

gggoobm

Unregistered / Unconfirmed
GUEST, unregistred user!
让计算存储的结果比显示结果多一位,然后多的那位在显示时用来做四舍五入,行吗?第一次回答问题,多给点分,谢谢^^
 
D

duhai_lee

Unregistered / Unconfirmed
GUEST, unregistred user!
对。 楼上的这个想法很好,
如果你显示了小数点后面10位, 那么你可以实际保存到15位,
如果正常 除法, 那么3.333....是无限循环的,所以 15位都是3,
如果 3.33(15位) * 3 > 3.33(10位) * 3 , 那么应该舍入了
 
S

songbo811031

Unregistered / Unconfirmed
GUEST, unregistred user!
TO duhai_lee:你的方法对所有的无限循环除法都可以搞定吗?
 
G

gggoobm

Unregistered / Unconfirmed
GUEST, unregistred user!
要求太高了吧,要不,你把所有记算的过程记录下来,然后每一次计算时从头开始算,对电脑来说不用花多少时间。可以吗?保证什么都搞定。
 
L

liuchong

Unregistered / Unconfirmed
GUEST, unregistred user!
var
D:Double;
begin
D:=10/3;
D:=D*3;
Caption:=FloatToStr(D);
end;
 
S

shayang

Unregistered / Unconfirmed
GUEST, unregistred user!
读书的时候做过这个,只限于有理数。无理数的不会。
显示归显示,处理任意一个有理数,都用一个分子和分母表示,不要用显示的那个结果,问题解决
 
S

songbo811031

Unregistered / Unconfirmed
GUEST, unregistred user!
TO:liuchong 你的方法好像可以,不过还想等等还有没有其他的好方法了,^_^!
 
S

songbo811031

Unregistered / Unconfirmed
GUEST, unregistred user!
结帖了,谢谢各位![;)]
 
顶部