设置双精度点后的位数

Posted

技术标签:

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

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

【问题讨论】:

inputValue = Math.Round(inputValue, 4);改编自***.com/questions/2357855/… 【参考方案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 操作累积的错误递增。

以上是关于设置双精度点后的位数的主要内容,如果未能解决你的问题,请参考以下文章

如何以 2 精度转换为双精度 - 点后的字符串?

C 语言中双精度浮点型精度怎样保留位数

double类型,小数点后的位数

Matlab怎样设置数据的有效数字使得小数点后的位数更多?

matlab如何设置小数点后位数?

为啥中位数跳闸 data.table (整数与双精度)?