四舍五入的问题(100分)

  • 主题发起人 主题发起人 andyluan
  • 开始时间 开始时间
A

andyluan

Unregistered / Unconfirmed
GUEST, unregistred user!
一个工资程序,paradox数据库,工资项目是货币型字段,可自由定义计算公式。其中有一个税金公式需要减基数后乘税率,计算结果应该是自动保留两位小
数,然后从应发合计中扣除税金。但现在税金计算的结果并不是自动保留两位小
数,而是有多少位就保留多少位,那么最后的实发工资,总是有误差。请问有没有四舍五入函数。有什么解决方案!不知各位是否遇到过此问题,请赐教!


 
不知paradox支不支持CAST表达式,如果支持
在显示时用CAST规定一下精度就行了。
 
可以通过DELPHI的函数对数据进行控制。

 
to:macson
能否讲得明白一点!
 
可以在tquery或ttable中加入一个字段,
用这个字段对税金计算的结果加0.005
后取整。
 
round,
format.
 
试一试:
Strtofloat(FormatFloat('0.'+StringOfChar('0',2),YourValue));
 
字段可设为数值型,待到输出时再进行小数的转换!
 
在定义数据库的时候你就可以将该字段的类型设为小数点为两位的:
Numeric(width1,width2); 其中width2为小数的位数;
这样计算结果就会自动进行四舍五入的。
不知你说的是不是这个意思。
 
round(x*100.0)/100
 
function round2(v:double):double;//四舍五入函数
var
s:string[30];
begin
s:=format('%0.2f',[v]);
result:=StrToFloat(s);
end
 
how to turn a integer value to a real value then?
 
下面的代码可将x保留小数点后i位,对第i+1位进行4舍五入,
返回的是实数。
function myRound(x:real; i:integer) : real;
var
fact : integer;
begin
fact:=1;
while( i>0 ) do begin
fact:=fact*10;
i:=i-1;
end;
myRound := round(x*fact)/fact;
end;
 
先乘100,取整后在除100。OK?
 
round(X*100+0.5)/100
 
gwd:round已经是四舍五入了.
秦浩天:还要加0.5吧: integer(x*100+0.5)/100
 
哇,精采.
我也来听听.
 
如果是用SQL:
select CAST(数字*100 + 0.5) as integer / 100 .....
不过税金计算是累进税率, 用SQL很难实现.
如果在Delphi内很简单拉.ZLF办法就不错.
 
本人发现DELPHI中的strtofoat(format('0.00',value))有问题,
如果你的第三位小数是5,比如strtofloat(format('0.00',27.655)),则结果有时是27.65,有时是27.66.百思不得其解。
问天下英雄,那位得知?
 
后退
顶部