我正在努力编写一个简单的货币转换程序。外部源提供的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());messagebox显示的是1099,而不是预期的0.1099,kursS仍然有逗号,而不是点。
我试着在谷歌上玩一些cultureInfo的东西,但那太随意了。我需要了解如何控制这一切。
发布于 2015-06-12 21:46:47
这是因为Replace方法返回带有替换字符的新字符串。它不会修改原始字符串。
所以你需要重新分配它:
kursS = kursS.Replace(",",".");发布于 2015-06-12 21:47:21
只需使用decimal.Parse,但指定一个CultureInfo。它没有任何“随机”之处--选择一个合适的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 --您试图表示在base10中自然指定的“人工”构造,而不是“自然”连续值(如权重)。
(我也会对以非标准格式提供数据的数据提供者持谨慎态度。如果他们搞错了,谁知道他们还会犯什么错。这并不是说XML没有明确的数字格式.)
发布于 2015-06-12 21:49:40
替换返回字符串。所以你需要一个任务。
kursS = kursS.Replace(",", ".");通过使用CulturInfo,有一种“更整洁”的方法来做到这一点。在MSDN网站上查找这个。
https://stackoverflow.com/questions/30812595
复制相似问题