Double.Parse无法保留逗号。

4
我试图将一个字符串转换成双精度浮点数,我有这个值:53.095,并尝试使用以下代码转换为双精度浮点数:
string doub = "53.095";
var cv = Convert.ToDouble(doub);

我得到的是:53095。为什么我没有逗号?我错过了什么吗?

或许这个stackoverflow的问题可以帮到你:https://dev59.com/MWgu5IYBdhLWcg3wHzoX - Lucas Delobelle
1个回答

9
我想这是因为不同的国家对逗号的处理方式不同。例如,我所在的国家使用,。因此,您必须了解字符串的格式化方式。
string doub = "53.095";
var cv = double.Parse(doub, new CultureInfo("en-GB"));

对于另一个本地化,这将起作用。
string doub = "53,095"; // note ,
var cv = double.Parse(doub, new CultureInfo("sv-SE"));

编辑:

正如king_nak所提到的,只要您使用英语格式进行格式化,就可以使用CultureInfo.InvariantCulture

[...] 它与英语相关,但与任何国家/地区无关。

string doub = "53.095";
string doub2 = "53,095"; 
var cv1 = double.Parse(doub, CultureInfo.InvariantCulture); // Works
var cv2 = double.Parse(doub2, CultureInfo.InvariantCulture); // Does not work.

2
我建议使用 CultureInfo.InvariantCulture 而不是新的信息来表示 GB-en。 - king_nak
@king_nak,是的,那确实是一种替代方案。但是,根据执行代码的服务器,它可能不是你想要的。https://dev59.com/cmkw5IYBdhLWcg3wn7-O - smoksnes
1
根据https://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.invariantculture(v=vs.110).aspx,InvariantCulture与英语相关联。如果您知道输入以这种格式进行格式化,则可以使用它来保证安全。 - king_nak
我认为你指的是“en-GB”(英国英语)和“sv-SE”(瑞典语,瑞典)。_编辑:_“GB-en”变成了__未知区域(gb-EN)__。 - Jeppe Stig Nielsen
@king_nak,我改正了。我修改了我的回答。 - smoksnes
@JeppeStigNielsen,谢谢。我已经更新了我的回答。 - smoksnes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接