在C#中将字符串转换为浮点数


108

我正在转换类似“ 41.00027357629127”的字符串,并且正在使用;

Convert.ToSingle("41.00027357629127");

要么

float.Parse("41.00027357629127");

这些方法返回4.10002732E + 15

当我转换为浮点数时,我想要“ 41.00027357629127”。这个字符串应该是相同的...


1
你怎么知道它转换成什么-那就是你如何显示数字
mmmmmm 2012年

1
知道为什么要使用ToSingle吗?而不是ToFloat?
达斯·维达勋爵(Lord Darth Vader)

41.00027357629127的科学计数形式不得为4.10002732E + 15,除非您的文化当然使用小数逗号而不是小数点(并用小数点作为千位分隔符),所以该数字将实际显示为:4100027357629127因此将显示为4.10002732E + 15
ljgww

Answers:


229

您的线程的语言环境设置为小数点为“,”而不是“。”的语言环境。

尝试使用此:

float.Parse("41.00027357629127", CultureInfo.InvariantCulture.NumberFormat);

但是请注意,浮点数不能包含那么多位数的精度。您必须使用double或Decimal来这样做。


35
别忘了添加using System.Globalization;要访问的名称空间CultureInfo
Mobiletainment 2014年

24

首先,它只是您在调试器中看到的数字的表示float。的真正价值约为准确(就像它是可能的)。

注意:处理浮点数与字符串时,请始终 使用CultureInfo信息。

float.Parse("41.00027357629127",
      System.Globalization.CultureInfo.InvariantCulture);

这只是一个例子。选择适合您情况的文化。


我该如何选择我的CultureInfo?我在土耳其,我将在其中添加TR-TR吗?
Mehmet 2012年

1
@Mehmetnew System.Globalization.CultureInfo("tr-TR")
sshow 2012年

20

您可以使用以下内容:

float asd = (float) Convert.ToDouble("41.00027357629127");

4
请提供一些有关为什么这是正确答案的背景信息。
Bas Peeters 2014年




-2

您可以使用double而不是float进行解析以获取更高的精度值。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.