【问题标题】:How to print floating point numbers in full precision如何以全精度打印浮点数
【发布时间】:2020-08-04 09:58:58
【问题描述】:

如果我的值 0.3 不能用 doublefloat 准确表示,我该如何将它的 real 值打印为字符串。像this这样的程序:

using System;
class Program 
{
    static void Main(string[] args) 
    {
        var line = Console.ReadLine();
        var d = float.Parse(line);
        Console.WriteLine("{0:R}", d);
    }
}

0.3 作为输入确实会打印0.3,这对我来说很奇怪,因为根据this 它应该类似于0.300000011920928955078125

所以问题是如何强制 .net 将 float/double 格式化为其 real 值。

【问题讨论】:

  • “它的真正价值。” --> 一些大大小小的double用100位表示exactly。通常 17 位有效数字就足够了。

标签: c# floating-point number-formatting floating-accuracy


【解决方案1】:

根据Standard numeric format strings

R 建议仅用于 BigInteger 类型。对于Double 类型,使用 “G17”;对于Single 类型,使用“G9”。

所以,尝试使用G9(因为float 可以提供高达 9 位有效数字的精度),它会为您提供预期的输出

Console.WriteLine("{0:G9}", d);

我会看到0.300000012的值

【讨论】:

    猜你喜欢
    • 2019-09-15
    • 2021-07-25
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 2016-09-02
    • 2015-02-02
    • 1970-01-01
    相关资源
    最近更新 更多