相关疑难解决方法(0)

如何将浮点数或货币转换为本地化字符串?

在Delphi 1中,使用FloatToStrFCurrToStrF将自动使用该DecimalSeparator字符表示小数点.不幸的DecimalSeparator 是在SysUtils中声明为Char1,2:

var 
  DecimalSeparator: Char;
Run Code Online (Sandbox Code Playgroud)

虽然LOCALE_SDECIMAL被允许最多为三个字符:

用于小数分隔符的字符,例如"." 在"3.14"或","在"3,14"中.此字符串允许的最大字符数为4,包括终止空字符.

这导致Delphi无法正确读取小数分隔符; 回退假设一个默认的小数分隔符" .":

DecimalSeparator := GetLocaleChar(DefaultLCID, LOCALE_SDECIMAL, '.');
Run Code Online (Sandbox Code Playgroud)

在我的计算机上,这是一个非常字符,这会导致浮点数和货币值错误地本地化为U + 002E(句号)小数点.

愿意直接调用Windows API函数,其目的是为了浮点或货币值转换为一个本地化的字符串:

除了这些函数之外,还需要一串图片代码,其中唯一允许的字符是:

  • 字符"0"到"9"(U+0030.. U+0039)
  • 一个小数点(.),如果数字是浮点值(U+002E)
  • 如果数字为负值,则在第一个字符位置显示减号(U+002D)

这将是一个很好的方式1至浮点或货币价值转换为遵守这些规则的字符串?例如

  • 1234567.893332
  • -1234567

鉴于本地用户的语言环境(即我的电脑):

delphi string localization internationalization delphi-5

15
推荐指数
1
解决办法
7424
查看次数

在Delphi中比较货币值时如何避免舍入问题?

AFAIK,Delphi Win32中的货币类型取决于处理器浮点精度.因此,在比较两个货币值时,我遇到了舍入问题,根据机器返回不同的结果.

现在我使用SameValue函数传递Epsilon参数= 0.009,因为我只需要2位十进制数字.

有没有更好的方法来避免这个问题?

delphi floating-point winapi currency

4
推荐指数
2
解决办法
7547
查看次数