如何解决"10,000.00"不是有效的浮点值,即使 TFormatSet 设置为 en-US



我正在尝试从10,000.00那里获得Double

aProductData.BuyPriceHT := 10000;
BuyPriceHTEdit.Text := FormatFloat('#,###.#0', aProductData.BuyPriceHT, FCurrencyFormat);
aProductData.BuyPriceHT := StrToFloat(BuyPriceHTEdit.Text, FCurrencyFormat); <-- error here

其中aProductData.BuyPriceHTDouble

FCurrencyFormat := TFormatSettings.Create('en-US'); 

注意:对于那些建议使用DecimalsInt64类型将货币存储在数据库中的好人。 我已经做到了,只是它仍然困扰着我为什么它不起作用。

来自StrToFloat的文档:

字符串中不允许使用千位分隔符和货币符号。

一般来说,有很多不同的方法可以写数字、日期和时间,以至于你不想从字符串(文本表示(转换为这样的值。

通常,您确保始终以数字形式存储和传输此类值(例如,作为整数、浮点数或此类值的记录(,并且仅当此类值要在 GUI 中显示或写入文本文件时,才将其转换为文本表示形式。

如果需要将其存储或传输为文本,请使用严格定义的格式。然后,您可以编写自己的转换器来解释该特定格式而不会产生歧义。

最新更新