【发布时间】:2016-06-09 03:41:31
【问题描述】:
如何判断一个浮点数是否是另一个浮点数的倍数?
例如500.4 是 0.001 的倍数吗?
double v = 500.4;
double multipleOf = 0.001;
double remainder = v % multipleOf;
// 0.000999999999966846
出于性能考虑,我不希望将双精度数转换为小数。考虑到浮点数学的不精确性,我该如何测试?
【问题讨论】:
-
我想这取决于你对多重的定义
-
这不是一个有意义的问题。将所有内容乘以 1000,这样您就可以使用像 int 或 long 这样的整数类型。或者使用 epsilon 来称呼它“足够接近”。
-
如果您要乘以将值转换为整数,如何找出双精度数中有多少个小数? multipleOf * Math.Pow(10, ?)
-
我已经更新了我的答案,因为它缺少检查(它不处理负值,但我认为您可以轻松地自己添加)。这是我所知道的关于浮点比较的最有用的文章,它可以让您进一步了解这个问题:Comparing Floating Point Numbers, 2012 Edition
标签: .net floating-point