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

Converting numbers to a single format in C#

我有以下情况,从客户端我得到一个字符串中的双精度值,它可以是 '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);

我做错了什么?

嗯,这种转换存在问题。

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

double a = 0;
double b = 0;

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

Assert.AreEqual(a,b);

这不是最好的方法,但很管用。

how do i make them produce the same value

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

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

您需要指定文化信息,试试这个:

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);