Jee*_*eva 1 delphi rounding truncation delphi-xe
我有以下代码来围绕货币
function MyRound(value :currency) : integer;
begin
if value > 0 then
result := Trunc(value + 0.5)
else
result := Trunc(value - 0.5);
end;
Run Code Online (Sandbox Code Playgroud)
到目前为止它运作良好,我现在的问题是,如果我想要像999999989000.4这样的货币,它给出负值,因为Truc接受int而MyRound也返回int.
我可能的解决方案是将货币转换为字符串并获取字符串.并将字符串转换回货币.这是一种正确的方法吗?我是delpi的新手,所以请帮助我.
你把事情搞得太复杂了。您可以简单地使用Round:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils;
var
C: Currency;
begin
C := 999999989000.4;
Writeln(Round(C));
C := 999999989000.5;
Writeln(Round(C));
C := 999999989000.6;
Writeln(Round(C));
C := 999999989001.4;
Writeln(Round(C));
C := 999999989001.5;
Writeln(Round(C));
C := 999999989001.6;
Writeln(Round(C));
Readln;
end.
Run Code Online (Sandbox Code Playgroud)
哪个输出
999999989000 999999989000 999999989001 999999989001 999999989002 999999989002
如果您不想要银行家的四舍五入,并且您确实想要您的Trunc逻辑,那么您确实需要编写自己的函数。但你的函数的问题是它被截断为 32 位整数。使函数返回一个 64 位整数:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils, Math;
var
C: Currency;
function MyRound(const Value: Currency): Int64;
begin
if Value > 0 then
result := Trunc(Value + 0.5)
else
result := Trunc(Value - 0.5);
end;
begin
C := 999999989000.4;
Writeln(MyRound(C));
C := 999999989000.5;
Writeln(MyRound(C));
C := 999999989000.6;
Writeln(MyRound(C));
C := 999999989001.4;
Writeln(MyRound(C));
C := 999999989001.5;
Writeln(MyRound(C));
C := 999999989001.6;
Writeln(MyRound(C));
Readln;
end.
Run Code Online (Sandbox Code Playgroud)
999999989000 999999989001 999999989001 999999989001 999999989002 999999989002
| 归档时间: |
|
| 查看次数: |
5989 次 |
| 最近记录: |