是的,本地化。
也就是说,我认为您的图片存储在 SQLServer 的“金钱”字段中(我假设它是您正在使用的 SQLServer)。如果那是数据库中的浮点数,它将返回一个正常的小数点,而不是欧洲货币分隔符“,”。
修复:
在你的c#代码中不要使用浮点数,除非你绝对需要一个浮点数。请改用 decimal 类型。这不仅仅是在这种情况下,而是在所有情况下。浮点数是二进制(以 2 为底),而不是十进制(以 10 为底),因此您在界面中看到的只是实际数字的十进制近似值。结果就是经常(1 == 1) evaluates as false!
我自己也遇到过这个问题,如果您不知道会发生这种情况,那真是令人抓狂。在 c# 中始终使用 decimal 而不是 float。
好的,在你修复它之后,然后执行此操作以获得正确的本地化:
using System.Globalization;
...
NumberFormatInfo ni = new NumberFormatInfo();
ni.CurrencyDecimalSeparator = ",";
decimal price = decimal.Parse(dbPriceDataField, ni);
请注意,“dbPriceDataField”必须是一个字符串,因此您可能需要对该数据库结果集的字段执行“.ToString()”。
如果您最终不得不处理该货币领域的其他“货币”方面,例如货币符号,请查看:http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.aspx
如果您需要更强大的错误处理,请将 decimal.Parse 放入 try/catch,或使用 decimal.TryParse。
编辑 --
如果您知道数据库设置为哪种文化(实际上是国家/地区),您可以这样做:
using System.Globalization;
...
CultureInfo ci = new CultureInfo("fr-FR"); // fr-FR being "french France"
decimal price = decimal.Parse(dbprice, ci.NumberFormat);