我有以下情况,从客户端我得到一个字符串的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);
我做错了什么?
答案 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,456
是123456
还是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);