【问题标题】:How to get floats value without including exponential notation如何在不包括指数符号的情况下获得浮点值
【发布时间】:2010-09-21 06:58:11
【问题描述】:

在 C# 中,是否可以在浮点数上执行 ToString 并在不使用指数的情况下获取值?

例如,考虑以下情况:

float dummy;

dummy = 0.000006F;

Console.WriteLine(dummy.ToString());

这给出了输出

6E-06

然而,我是什么

0.000006

我能找到的最接近的是使用“F”限定符,但是我需要指定小数位数,否则值会被四舍五入。

实际上有没有一种方法可以自动执行此操作,或者我是否需要执行大量时髦的逻辑来修剪零或找出所需的小数位数。

谢谢;
理查德·莫斯

【问题讨论】:

    标签: c# floating-point tostring


    【解决方案1】:

    试试这个

    Console.WriteLine(dummy.ToString("F"));
    

    您还可以指定小数位数。例如 F5、F3 等。

    另外,您可以检查自定义格式说明符

    Console.WriteLine(dummy.ToString("0.#########"));
    

    【讨论】:

    • 是的,如前所述,我已经尝试过了。但是,我需要指定我不一定知道的小数位数(除非我还缺少其他东西;)) - 我有点惊讶我似乎无法做到这一点,除非使用 E 符号我的用户不想要的。
    • 哦,对不起,我必须更仔细地阅读。因此,如果要显示浮点数,则应声明要显示的最大十进制精度。顺便说一句,浮点类型不提供高精度(~10^(-39)),你可以选择足够大的小数位数
    • 我也试过这个,即 F10,但“副作用”是在 6 之后零继续。我希望避免这种情况,但如果这是我唯一的方法我想可以去掉多余的零。它看起来很……笨重!
    • 也许自定义格式会对您有所帮助。试试这个: Console.WriteLine(dummy.ToString("0.#########"));它将打印最多 9 位小数并删除尾随零
    • @Richard 你考虑过使用十进制类型吗?听起来这可能更适合您的需求。
    【解决方案2】:
    string dum = string.Format("{0:f99}",dummy).TrimEnd('0');
    if (dum.EndsWith(",")) dum = dum.Remove(dum.Length - 1);
    

    【讨论】:

      【解决方案3】:

      如果没有进一步的背景信息,很难说 - 但听起来你想要十进制语义。那么为什么不改用decimal 类型呢?

      decimal dummy;
      dummy = 0.000006M;
      

      十进制类型在表示十进制数字方面比floatdouble 更准确,但它的性能不如。请参阅here 了解更多信息。

      【讨论】:

        【解决方案4】:
        Console.WriteLine(dummy.ToString("N5"));
        

        其中 5 是它的小数位数

        【讨论】:

        • 感谢您的回复,这也是我已经尝试过的,并且遇到了与 F 限定符相同的问题,因为我需要明确指定一个我不知道的精度。
        【解决方案5】:
        float dummy = 0.000006F;
        Console.WriteLine(dummy.ToString("0." + new string('#', 60)));
        

        如果您经常这样做,那么将格式字符串存储在某个地方的 static 字段/属性中并重新使用它是有意义的,而不是每次都构造一个新的 string

        private static readonly string _allFloatDigits = "0." + new string('#', 60);
        
        // ...
        
        float dummy = 0.000006F;
        Console.WriteLine(dummy.ToString(_allFloatDigits));
        

        【讨论】:

          猜你喜欢
          • 2017-06-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-03-19
          • 2022-01-04
          • 1970-01-01
          • 2016-08-24
          相关资源
          最近更新 更多