首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串到双转换(逗号到点号)

字符串到双转换(逗号到点号)
EN

Stack Overflow用户
提问于 2015-06-12 21:42:48
回答 4查看 1.8K关注 0票数 1

我正在努力编写一个简单的货币转换程序。外部源提供的XML使用逗号作为汇率(Kurs_sredni)的十进制分隔符:

代码语言:javascript
复制
<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“赋值给一个字符串,试图将",”替换为“”。然后把它改造出来:

代码语言:javascript
复制
string kursS = kursyAktualne[iNa].kurs_sredni;
kursS.Replace(",",".");
kurs = Convert.ToDouble(kursS);
MessageBox.Show(kurs.ToString());

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

我试着在谷歌上玩一些cultureInfo的东西,但那太随意了。我需要了解如何控制这一切。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-06-12 21:46:47

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

所以你需要重新分配它:

代码语言:javascript
复制
kursS = kursS.Replace(",",".");
票数 1
EN

Stack Overflow用户

发布于 2015-06-12 21:47:21

只需使用decimal.Parse,但指定一个CultureInfo。它没有任何“随机”之处--选择一个合适的CultureInfo,然后使用它。例如:

代码语言:javascript
复制
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没有明确的数字格式.)

票数 3
EN

Stack Overflow用户

发布于 2015-06-12 21:49:40

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

代码语言:javascript
复制
kursS = kursS.Replace(",", ".");

通过使用CulturInfo,有一种“更整洁”的方法来做到这一点。在MSDN网站上查找这个。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30812595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档