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

136
我正在转换一个类似于"41.00027357629127"的字符串,并且我正在使用;
Convert.ToSingle("41.00027357629127");

或者

float.Parse("41.00027357629127");

这些方法返回的是4.10002732E+15
当我转换为浮点数时,我希望得到"41.00027357629127"。这个字符串应该是一样的...

2
你如何知道它被转换成什么 - 也就是你如何显示数字。 - mmmmmm
1
为什么要用ToSingle而不是ToFloat? - Lord Darth Vader
1
4100027357629127不应该以科学计数法表示为4.10002732E+15,除非您的文化使用小数逗号而不是小数点(并使用点作为千位分隔符),因此该数字实际上将读取为:4100027357629127,从而显示为4.10002732E+15。 - ljgww
9个回答

271

您的线程所在的语言环境将小数点设为","而不是"。"

尝试使用以下内容:

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

需要注意的是,浮点数无法保留那么多位有效数字。您需要使用double或Decimal来实现。


44
别忘了加上命名空间 using System.Globalization; 来访问 CultureInfo - Mobiletainment
谢谢这个提示。运行良好。 - Sedat Kumcu

34

您可以使用以下内容:

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

5
请提供一些背景信息,解释为什么这是正确答案。 - Bas Peeters

28

首先,这只是在调试器中看到的float数字的表示形式。它的实际值大致是准确的(尽可能地)。

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

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

这只是一个例子,针对你的情况选择一个适当的文化。


我该如何选择我的CultureInfo?我在土耳其,应该添加TR-TR吗? - Mehmet
1
@Mehmet new System.Globalization.CultureInfo("tr-TR") - sshow

8

2
这会不会将数据类型从float改为double?OP想要的是float。 - Fran Martinez
使用 (float) Convert.ToDouble("41.00027357629127"); 将其转换为浮点数。 - Liam

4

我尝试使用 double.Parse,但它返回了 4100027357629127.0。这太糟糕了。 - Mehmet
2
这似乎是因为在您的语言环境中“.”字符不是小数分隔符?请查看https://dev59.com/zm865IYBdhLWcg3wU8-I - jpe

2

2022年将字符串转换为浮点数的方法:

(float)Convert.ToDecimal(value, CultureInfo.GetCultureInfo("en-US"));

您还可以选择要转换的浮点数类型,因为一些 CultureInfo 实例使用 , 表示十进制值,而另一些则使用 .

如果您需要更多小数位以获得更高的精度,请不要使用 float

Convert.ToDecimal(value, CultureInfo.GetCultureInfo("en-US"));

0
你可以使用 double.Parse("41.00027357629127");

我认为他并不是在问如何四舍五入。 - O. R. Mapper

-1
首先,您需要使用 System.Globalization 来处理从字符串到浮点数/双精度/十进制数的转换,以避免出现问题。
然后,您可以在 float(或 double/decimal,具体取决于您需要的精度)上调用 Parse,并将您的 string(如果需要,可以将其存储在变量中)和 CultureInfo.InvariantCulture.NumberFormat 作为 Parse 的参数。
因此,正如之前的用户已经解释过的那样:
float.Parse("41.00027357629127", CultureInfo.InvariantCulture.NumberFormat);

这并不解答问题。一旦你有足够的 声望,你就可以在任何帖子中进行评论;而不是提供需要询问者澄清的答案。- 来自审核 - JerodG

-2

您可以使用双精度浮点数(double)进行解析,以获得更高的精度值。


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