我在C#应用程序中遇到一个非常奇怪的问题。问题是一致的,但只能在一台远程计算机上。下面的data
包含十进制数字。我执行以下简化操作:
Array data = (Array)get_data(); // array of decimals
StringBuilder sb = new StringBuilder();
sb.Append(data.GetValue(0));
string s = sb.ToString();
这将14.62之类的数字转换为“14,62”,即逗号而不是点。稍后,当我将此字符串解析为double
时,会产生错误。怎么预防这个?
请注意,我无法访问该远程计算机。我只能调整程序的代码,然后发送新的安装程序。
答案 0 :(得分:3)
StringBuilder sb = new StringBuilder();
sb.Append(((double)data.GetValue(0)).ToString(CultureInfo.InvariantCulture));
请参阅:http://msdn.microsoft.com/en-us/library/shxtf045(v=vs.110).aspx
答案 1 :(得分:2)
由于远程计算机的文化,您获得了不同的输出。有些文化使用,
作为小数分隔符,有些使用.
。要覆盖,您必须使用ToString
致电CultureInfo.InvariantCulture
。您也可以使用以下一个衬垫,它会给你相同的东西。
string s = string.Join(",",
data.OfType<decimal>()
.Select(r=> r.ToString(CultureInfo.InvariantCulture)));
(我假设你需要一个分隔符分隔的数据元素字符串,因为你使用的是StringBuilder)
答案 2 :(得分:1)
我有一个类似的问题,我克隆了文化不变量(使它成为美国)
private string ConvertPriceFormat(double amount)
{
string price = string.Empty;
// NumberFormatInfo of InvariantCulture thousandseparator = "," DecimalSeparator="."
NumberFormatInfo nfi = (NumberFormatInfo)CultureInfo.InvariantCulture.NumberFormat.Clone();
// make Changes for the Injection
nfi.NumberGroupSeparator = "";
// Format the price with the defined format
price = amount.ToString("n", nfi);
return price;
}
只需将其更改为从字符串转换为双倍