设置双精度点后的位数
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 操作累积的错误递增。以上是关于设置双精度点后的位数的主要内容,如果未能解决你的问题,请参考以下文章