将System.Array的C#十进制值转换为字符串

时间:2014-01-21 19:15:06

标签: c# decimal

我在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时,会产生错误。怎么预防这个?

请注意,我无法访问该远程计算机。我只能调整程序的代码,然后发送新的安装程序。

3 个答案:

答案 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;
}

只需将其更改为从字符串转换为双倍