【问题标题】:Set the number of digits after the point in double设置双精度点后的位数
【发布时间】:2011-01-19 04:23:33
【问题描述】:

在 c# double 类型中,我如何设置点后的位数,我只需要 4。 谢谢。

【问题讨论】:

标签: c# types double


【解决方案1】:

你不能。 Binary floating point 不是这样工作的。您可以 format 以这种方式加倍(例如,使用 "f4" 作为格式字符串),但如果您正在处理具有自然数 decimal 位的值,那么您可能应该改用decimal。您能否向我们提供更多关于您的价值观所代表的信息?

【讨论】:

  • 我正在做 2 个点的 x 之间的相等,并且值是 5.0000 和 4.999999996,我需要它是真的
  • @Bass:如果你只是做一个相等性测试,那么 nobugz 的答案可能是正确的方法。不过,我仍然会考虑您是否要使用小数 - 这取决于您获得的值的类型。
【解决方案2】:

不能直接设置double上点后的位数。

您可以使用格式字符串更改双精度的字符串表示形式。

一个例子是:

string.Format("{0:0.####}", number);

或者正如 Jon Skeet 指出的那样:

number.ToString("f4")

【讨论】:

    【解决方案3】:

    使用它来比较两个浮点数与分数中的 4 位数字:

      if (Math.Abs(a - b) < 1E-4) {
        // close enough
        //...
      }
    

    【讨论】:

    • 如果你想绝对确定它们是相等的,那么它应该是 Double.epsilon 而不是 1e-4。如果您想说它们“足够接近”相等,那么您的代码就可以了
    • Double.Epsilon 不能按原样工作,它太小了。适当的 epsilon 类似于 * 1E-15 但必须针对每个 FP 操作累积的错误递增。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    • 2021-04-02
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-14
    相关资源
    最近更新 更多