如何将浮点数或货币转换为本地化字符串?
在Delphi1中,使用FloatToStrF或CurrToStrF会自动使用DecimalSeparator字符来表示小数点.不幸的是DecimalSeparator
is declared in SysUtils as
Char 1,2:
var DecimalSeparator: Char; 而
这导致Delphi无法正确读取小数分隔符;退回以假定“.”的默认小数分隔符: DecimalSeparator := GetLocaleChar(DefaultLCID,LOCALE_SDECIMAL,'.'); 在我的电脑上,which is quite a character,这样会导致浮点数和货币值错误地以U+002E(全停)小数点进行本地化. 我愿意直接调用Windows API函数,这些函数旨在将浮点值或货币值转换为本地化的字符串: > 除了这些功能需要一串图片代码,其中唯一允许的字符是: >字符“0”到“9”(U 0030..U 0039) 将浮点值或货币值转换为符合这些规则的字符串将是一个好办法1?例如 > 1234567.893332 鉴于本地用户的区域设置(即我的电脑): >可能不会使用 – 来表示否定(例如 – ) 一个可怕的,可怕的,黑客,我可以使用: function FloatToLocaleIndependantString(const v: Extended): string; var oldDecimalSeparator: Char; begin oldDecimalSeparator := SysUtils.DecimalSeparator; SysUtils.DecimalSeparator := '.'; //Windows formatting functions assume single decimal point try Result := FloatToStrF(Value,ffFixed,18,//Precision: "should be 18 or less for values of type Extended" 9 //Scale 0..18. Sure...9 digits before decimal mark,9 digits after. Why not ); finally SysUtils.DecimalSeparator := oldDecimalSeparator; end; end; VCL使用的功能链附加信息: > > > 注意 > DecimalSeparator:Char,单个character global is deprecated,并替换为另一个单字符小数分隔符 1在我的Delphi版本 解决方法
好的,这可能不是你想要的,但它适用于D2007及以上.
线程安全和所有. uses Windows,SysUtils; var myGlobalFormatSettings : TFormatSettings; // Initialize special format settings record GetLocaleFormatSettings( 0,myGlobalFormatSettings); myGlobalFormatSettings.DecimalSeparator := '.'; function FloatToLocaleIndependantString(const value: Extended): string; begin Result := FloatToStrF(Value,//Precision: "should be 18 or less for values of type Extended" 9,//Scale 0..18. Sure...9 digits before decimal mark,9 digits after. Why not myGlobalFormatSettings ); end; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |