小数点第一位不是0就进一,这种该怎么实现 ( 积分: 20 )

  • 主题发起人 主题发起人 只你
  • 开始时间 开始时间

只你

Unregistered / Unconfirmed
GUEST, unregistred user!
比如:1500.1要变成1501这样子
 
Trunc(1500.1 + 0.9)
 
不是这样子,你还不了解我说什么
 
var
dwValue: Double;
begin
dwValue := 1500.1;
dwValue := dwValue + 0.9;
Trunc(dwValue);
end;
 
if Trunc(1500.1) < 1500.1 then
Inc(Trunc(1500.1))
 
向上收整 ceil(1500.1)=1501
 
一点想法:数字加上0.4再四舍五入到整数位。是否想要的结果。
RoundTo(1500.1+0.4,0)
 
Ceil() 用这个函数,只要有小数就进位,不管是 0.1 还是 0.0001 。
 
能不能不动代码改数据类型就可以了
 
“只你”同志,lqcps先生说的不是正确的吗:
一点想法:数字加上0.4再四舍五入到整数位。是否想要的结果。
RoundTo(1500.1+0.4,0)
 
其实二楼就对了,只是没认真说明而已,我又解释了一遍,结果楼主还是没懂。。。。
 
我是打印想一个月工资报表,实发的工资是这样显示如:1500.456,那我就想不动代码是他显示出这样子来1501,就是只要小数点第一位不是0的数,都要进1到个位数上。
 
似乎不行,只能四舍五入。。。
 
没有其它的办法吗?
 
在数据库里SELECT 出来时就用Ceil() 这个函数,只要有小数就进位
 
var a, b: Double;
if b <> 0 then
begin
if ( A / B ) <> ( A div b) then
Result := a div b + 1
else
Result := a div b;
end
else
Result := 0;
 
上面说的不错了,你可以使用卷尾函数,如果你使用的是sqlserver数据库,直接使用CEILING函数,如果你使用其它的数据库,可以找对应的函数,因为数据库也比较多,所以只用sqlserver举个例子,一般的数据库都会有卷尾函数,四舍五入函数,舍尾函数,这个你可以从帮助中找到,不知道你是否明白;再者,如果你使用程序逐个控制,就可以比较取整后的数是否小于原来的数,如果小于就+1,这样就可以了
 
这个算法有问题
我们的计算里,扣工资是向上取整,发工资是向下取整的。
在Oracle或Sql Server 里设算了。
 
只要小数点后第一位大于0就进位?
var
sal: Double;

sal := 1500.1;
if Frac(sal) >= 0.1 then
sal := Integer(sal) + 1;
 
谢谢各位了,我想用这个ceiling这个函数应该可以解决!分不多请笑纳
 

Similar threads

回复
0
查看
978
不得闲
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部