字符串到双重转换(逗号到点问题)

时间:2015-06-12 21:42:48

标签: c# xml wpf silverlight type-conversion

苦苦挣扎 - 我正在尝试编写一个简单的货币转换器。外部源提供的XML使用逗号作为汇率的小数分隔符(kurs_sredni):

<pozycja>
    <nazwa_waluty>bat (Tajlandia)</nazwa_waluty>
    <przelicznik>1</przelicznik>
    <kod_waluty>THB</kod_waluty>
    <kurs_sredni>0,1099</kurs_sredni>
</pozycja>

我已经设法将XML中的数据加载到一个漂亮的对象列表中(kursyAktualne),现在我正在尝试进行数学计算。我坚持转换。

首先,我将“kurs_sredni”分配给字符串,尝试将“,”替换为“。”并将地狱转换出来:

string kursS = kursyAktualne[iNa].kurs_sredni;
kursS.Replace(",",".");
kurs = Convert.ToDouble(kursS);
MessageBox.Show(kurs.ToString());

消息框显示1099而不是预期的0.1099,而kursS仍然有逗号,而不是点。

尝试用一些文化信息玩弄谷歌搜索,但这太随机了。我需要了解如何控制它。

4 个答案:

答案 0 :(得分:3)

只需使用decimal.Parse,但请指定CultureInfo。什么都没有&#34;随机&#34;关于它 - 选择一个合适的CultureInfo,然后使用它。例如:

using System;
using System.Globalization;

class Test
{
    static void Main()
    {
        var french = CultureInfo.GetCultureInfo("fr-FR");
        decimal value = decimal.Parse("0,1099", french);
        Console.WriteLine(value.ToString(CultureInfo.InvariantCulture)); // 0.1099
    }
}

这只是使用法语作为使用,作为小数分隔符的文化的一个示例。使用数据来源的文化可能是有意义的。

请注意,decimal是货币值的最佳选择,而不是double - 您尝试代表&#34;仿真&#34;在base10中自然指定的构造,而不是&#34; natural&#34;连续值,如重量。

(我也会对以非标准格式提供数据的数据提供商持谨慎态度。如果他们弄错了,谁知道他们还会犯错什么。不像XML那样没有一个明确指定的数字格式......)

答案 1 :(得分:1)

这是因为Replace方法返回带有替换字符的新字符串。它不会修改您的原始字符串。

所以你需要重新分配它:

kursS = kursS.Replace(",",".");

答案 2 :(得分:0)

Replace返回一个字符串。所以你需要一个任务。

kursS = kursS.Replace(",", ".");

有&#34; neater&#34;通过使用CulturInfo这样做的方式。在MSDN网站上查看。

答案 3 :(得分:0)

您替换结果未使用,但原始值不包含替换。 你应该这样做:

kursS = kursS.Replace(",", ".")

此外,如果有数千个分隔符,这种方法并不安全。 因此,如果您不使用文化设置,您应该这样做:

kursS = kursS.Replace(".", "").Replace(",", ".")