作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在编写一个扩展方法来比较两个 float ,使用一组小数点(有效数字)来确定它们是否相等,而不是公差或百分比差异。查看有关 float 比较的其他问题,我看到了复杂的实现。我是不是过于简单化了或者这是否有效?
/// <summary>
/// Determines if the float value is equal to (==) the float parameter according to the defined precision.
/// </summary>
/// <param name="float1">The float1.</param>
/// <param name="float2">The float2.</param>
/// <param name="precision">The precision. The number of digits after the decimal that will be considered when comparing.</param>
/// <returns></returns>
public static bool AlmostEquals(this float float1, float float2, int precision = 2)
{
return (Math.Round(float1 - float2, precision) == 0);
}
注意:我正在寻找小数位比较,而不是公差。我不希望 1,000,000 等于 1,000,001。
最佳答案
基于@infact 的回答以及我提出的问题和答案中的一些评论
public static bool AlmostEquals(this float float1, float float2, int precision = 2)
{
float epsilon = Math.Pow(10.0, -precision)
return (Math.Abs(float1-float2) <= epsilon);
}
这有接受任何整数的好处,您可以使用 precision = -x 检查 > 1.0 的精度,其中 x 是要检查的 10 的幂。
我还建议将默认精度设置为 3,如果将此方法用于财务,默认情况下可以将精确度降低到十分之一便士。
关于c# - 这是占一定小数位数的有效 float 比较吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9180385/
我正在尝试开发右边框/Angular 具有特定 Angular (30°) 的表格。我见过一些类似的解决方案,但它们都无法在一定程度上发挥作用。如果我想从 30° 改变到 20°,我不想花太多力气。
我是一名优秀的程序员,十分优秀!