Delphi   发布时间:2022-04-10  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了如何让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
>德尔福货币> = 0.005:= 0.00

编辑#3
好文章:http://rvelthuis.de/articles/articles-floats.html
可能的解决方案:http://rvelthuis.de/programs/decimals.html

编辑#4
这是Embarcadero讨论的解决方案之一

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;

大佬总结

以上是大佬教程为你收集整理的如何让Delphi货币类型一直像Excel一样圆?全部内容,希望文章能够帮你解决如何让Delphi货币类型一直像Excel一样圆?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。