苦苦挣扎 - 我正在尝试编写一个简单的货币转换器。外部源提供的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仍然有逗号,而不是点。
尝试用一些文化信息玩弄谷歌搜索,但这太随机了。我需要了解如何控制它。
答案 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(",", ".")