在Delphi 1中,使用FloatToStrF或CurrToStrF将自动使用该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函数,其目的是为了浮点或货币值转换为一个本地化的字符串:
除了这些函数之外,还需要一串图片代码,其中唯一允许的字符是:
U+0030.. U+0039).),如果数字是浮点值(U+002E)U+002D)这将是一个很好的方式1至浮点或货币价值转换为遵守这些规则的字符串?例如
1234567.893332-1234567鉴于本地用户的语言环境(即我的电脑):
-表示否定(例如--).来表示小数点(例如,,)0123456789来表示数字 …AFAIK,Delphi Win32中的货币类型取决于处理器浮点精度.因此,在比较两个货币值时,我遇到了舍入问题,根据机器返回不同的结果.
现在我使用SameValue函数传递Epsilon参数= 0.009,因为我只需要2位十进制数字.
有没有更好的方法来避免这个问题?