在 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 吗? @Mehmetnew 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# 中将字符串转换为浮点数的主要内容,如果未能解决你的问题,请参考以下文章