c# - 比较两位小数

标签 c# comparison decimal

我想在 C# 中比较两个小数,并有一些误差。谁能指出以下代码的问题。请注意,我对小数点后 6 位感兴趣,之后我可以忽略这些值。

var valOne = decimal.Round(valueOne, 6);
var valTwo = decimal.Round(valueTwo, 6);
var difference = Math.Abs(valOne - valTwo);
if (difference > 0.0000001m) {
   Console.WriteLine("Values are different");
}
else {
    Console.WriteLine("Values are equal");
}

或者有没有更好的办法。

最佳答案

如果您将值四舍五入到小数点后 6 位,则您的 epsilon 值太小。这两个值可以相差的最小量是 0.000001。

例如:

var valOne = Decimal.Round(1.1234560M, 6);    // Gives 1.123456
var valTwo = Decimal.Round(1.1234569M, 6);    // Gives 1.123457

if (Math.Abs(valOne - valTwo) >= 0.000001M)
{
    Console.WriteLine("Values differ");
}
else
{
    Console.WriteLine("Values are the same");
}

关于c# - 比较两位小数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30727449/

相关文章:

php - 多维数组中特定键的数组差异

java - 如何将十进制转换为以空格分隔千位

c# - CodePlex 和 CodeProject 的 QuickGraph 之间的区别

javascript - 为什么这段代码中的一个变量大于另一个?

c# - 如何在 IE 保护模式下访问 AppData(从托管 BHO)

c# - 将 session 和响应对象传递给类 - 开销?

c# - 使用带小数的指数

你能在 C 中将一个值四舍五入到小数点后两位吗?

c# - Entity Framework 6.0 代码优先迁移 - 模型/数据库兼容性错误?

c# - .NET框架实现了什么排序算法