如何让Delphi货币类型一直像Excel一样圆?
我试图让Delphi像Excel一样圆,但我不能.这是代码:
procedure TForm1.Button1Click(Sender: TObject); var s : string; c : currency; begin c := 54321.245; s := ''; s := s + Format('Variable: %m',[c]); s := s + chr(13); s := s + Format(' Literal: %m',[54321.245]); ShowMessage(s); end; 我正在使用设置为54321.245的货币变量,当我格式化此变量时,它使用Bankers Rounding进行舍入.但是,当我将相同的值格式化为文字时,它会舍入Excel舍入的方式. 无论是形成货币变量还是字面值,我都期待这个回合到54,321.25美元.我怎样才能确保Delphi每次都以与Excel相同的方式进行舍入? 编辑 The rounding I expect to see is as follows: 54,321.245 = 54,321.25 54,321.2449 = 54,321.24 54,431.2499 = 54,421.25 我只使用文字来展示Delphi的不同方式.我希望在实际代码中使用变量. 注意: 编辑#2 有人建议我不清楚我的要求,这绝对不是真的.我对我的要求有一个非常清楚的理解,我显然没有很好地解释它们.我想要的舍入方法是两位小数.当deimal部分具有千分之一值> = 0.005时,我希望它舍入到0.01,Delphi提供的货币类型不会这样做.我也试过这个例子,使用带有money数据类型的Microsoft SQL(我假设它与Delphi的货币相同),并且SQL按照我描述的方式对它进行了轮询. > SQL Money> = 0.005 = 0.01 编辑#3 编辑#4 function RoundCurrency(const Value: Currency): Currency; var V64: Int64 absolute Result; Decimals: Integer; begin Result := Value; Decimals := V64 mod 100; Dec(V64,Decimals); case Decimals of -99 .. -50 : Dec(V64,100); 50 .. 99 : Inc(V64,100); end; end; 解决方法
如果我理解正确,你正在寻找这个:
function RoundTo2dp(Value: Currency): Currency; begin Result := Trunc(Value*100+IfThen(Value>0,0.5,-0.5))/100; end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |