【问题标题】:Converting float to string and getting exact value将浮点数转换为字符串并获得精确值
【发布时间】:2010-02-15 21:21:59
【问题描述】:

这是我关于converting string to float的最后一个问题的跟进

我将此值存储在一个浮点变量中:33.9112625(它是 33),我需要将其转换为字符串并获得确切的值,但我无法这样做。 float.ToString( CultureInfo.InvariantCulture) 结果给我“33.91126”。我尝试了 .ToString("G"), "G7" 和 CultureInfo.InvariantCulture.NumberFormat 但它们没有帮助。如何将浮点数转换为字符串并获得完全相同的值?

【问题讨论】:

  • 您确定这是您存储的确切值吗?
  • 如果你想要精确的值,浮点数对于数据类型来说是一个非常糟糕的选择。
  • 如果你想要精确的十进制表示,你应该使用小数。
  • float类型只能可靠存储7位有效数字。您永远不会得到该号码的最后两位数字。

标签: .net string floating-point


【解决方案1】:

首先,您没有将“精确”值保存在浮点数 (System.Single) 中。详情请见David Goldberg's article on floating point precision

话虽如此,如果你想转换它,你需要为 Single.ToString() 指定额外的精度。通过使用“G”,您将获得default precision,即 7。在您的情况下,要查看您显示的值,您需要 9,因此您可以使用“G9”。

【讨论】:

    【解决方案2】:

    Jon Skeet 提供 an article explaining 这个以及 C# 代码来打印确切的表示。

    【讨论】:

    • 如果文章过期,您能提供一个摘要吗?
    【解决方案3】:

    尝试将其更改为 Decimal 类型,我尝试使用 float 但它只会显示 5 个小数位。

    十进制 d = 33.9112625M; Console.WriteLine("{0}", d.ToString(System.Globalization.InvariantCulture));

    希望这会有所帮助, 此致, 汤姆。

    【讨论】:

    • 至少对它被否决的原因发表评论是有利的?无知...如果你足够关心提高自己,我敢肯定你会做同样的事情!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 2017-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多