在C#中将数字转换为单一格式

时间:2015-01-21 19:01:37

标签: c# number-formatting cultureinfo

我有以下情况,从客户端我得到一个字符串的double值,这可以是' en-GB'格式或' de'格式,即123.10或123,10。但是我需要将这两个数字转换为123.10。即我尝试使用NumberFormatInfo编写以下测试,但它没有通过:

var format = new NumberFormatInfo { NumberGroupSeparator = ",", NumberDecimalSeparator = "." };

        var a = Double.Parse("23000.10", format);
        var b = Double.Parse("23000,10", format);

        Assert.AreEqual(a,b);

我做错了什么?

3 个答案:

答案 0 :(得分:1)

嗯,这种转换存在问题。

无论如何,在某些项目中我使用了以下代码:

double a = 0;
double b = 0;

double.TryParse("23000.10".Replace(",","."), out a);
double.TryParse("23000,10".Replace(",", "."), out b);

Assert.AreEqual(a,b);

这不是最好的方法,但它有效。

答案 1 :(得分:1)

  

如何让它们产生相同的值

你不能不知道上下文 - 如果你不知道输入的上下文,就无法区分123,456123456还是123.456

如果您的输入永远不会包含数千个分隔符(您的示例中似乎就是这种情况),那么用句点替换逗号是一种合理的解决方案。

答案 2 :(得分:1)

您需要指定文化信息,请尝试使用:

var cultureInfo1 = new CultureInfo("de-DE");
var cultureInfo2 = new CultureInfo("en-GB");

var a = Double.Parse("1200,00", cultureInfo1);
var b = Double.Parse("1200.00", cultureInfo2);

Assert.AreEqual(a,b);