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

Posted

技术标签:

【中文标题】在 C# 中将字符串转换为浮点数【英文标题】:Converting String To Float in C# 【发布时间】:2012-06-27 11:54:00 【问题描述】:

我正在转换像“41.00027357629127”这样的字符串,我正在使用;

Convert.ToSingle("41.00027357629127");

float.Parse("41.00027357629127");

这些方法返回 4.10002732E+15

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

【问题讨论】:

你怎么知道它被转换成什么 - 那就是你如何显示数字 知道为什么它是 ToSingle 吗?而不是 ToFloat? 41.00027357629127 在科学记数法中不应为 4.10002732E+15,除非您的文化当然使用十进制逗号而不是小数点(点作为千位分隔符),因此该数字实际上将变为:4100027357629127 因此变为显示为 4.10002732E+15 【参考方案1】:

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

试试这个:

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

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

【讨论】:

别忘了添加命名空间using System.Globalization;来访问CultureInfo 感谢您的提示。工作正常【参考方案2】:

首先,它只是您在调试器中看到的float 数字的表示real 值近似准确(尽可能准确)。

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

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

这只是一个例子;为您的案例选择合适的文化。

【讨论】:

如何选择我的 CultureInfo ?我在土耳其,我将添加 TR-TR 吗? @Mehmet new System.Globalization.CultureInfo("tr-TR")【参考方案3】:

您可以使用以下内容:

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

【讨论】:

请提供一些上下文说明为什么这是正确答案。【参考方案4】:

使用Convert.ToDouble("41.00027357629127");

Convert.ToDouble documentation

【讨论】:

这不会将数据类型从浮点数更改为双精度数吗? OP想要浮动。【参考方案5】:

float 的精度为 7 位。如果要保留全部,则需要使用保留 15-16 位的double 类型。关于格式化,看一篇关于formatting doubles的帖子。你需要担心about decimal separators in C#。

【讨论】:

我累了双倍。解析它返回 4100027357629127.0 太糟糕了 这听起来像“。”字符不是您的语言环境中的小数分隔符?查看***.com/questions/3870154/c-sharp-decimal-separator【参考方案6】:

你可以double.Parse("41.00027357629127");

【讨论】:

我不认为他在问如何舍入它。【参考方案7】:

您可以使用双精度而不是浮点解析来获得更精确的值。

【讨论】:

以上是关于在 C# 中将字符串转换为浮点数的主要内容,如果未能解决你的问题,请参考以下文章

无法在python中将字符串转换为浮点数

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

ValueError:无法在熊猫中将字符串转换为浮点数

如何在 JavaScript 中将字符串转换为浮点数?

在 Objective-C 中将货币字符串转换为浮点数

在 Apple Swift 中将字符串转换为浮点数产生的值与模块错误不同