我需要使用 JavaScript 确定浮点数是否是另一个浮点数的倍数。
我已经阅读了一些关于浮点数的其他问题,并且了解到它们不能与模运算符 (%) 一起正常工作。我还读到您可以通过乘以 10/100/1000 等将浮点数转换为整数,但这并非在所有情况下都能正常工作。
例子:
var A = 25.13;
var B = .0001;
var Value = A*1e5;
var Step = B*1e5;
// Is Value a multiple of Step?
if(0 === (Value % Step)) {
// Do something
}
在这种情况下,Value 是 Step 的倍数,它可以正常工作。但是关于:
var A = 2.2;
var B = .0001;
它应该是一个有效的倍数,但我们得到的是:
220000.00000000003 % 10 = 2.9103830456733704e-11
小数点后 11 位有错误的 3。我想我可以通过以下方式纠正四舍五入的问题toFixed()
:
var Value = (A*1e5).toFixed(10);
var Step = (B*1e5).toFixed(10);
但如果你这样做:
var A = 45436212356482;
var B = .0001;
你得到:
4543621235648200192.0000000000 % 10.0000000000=2
这是一个有效的倍数,但它认为它不是。
和:
var A = 45436212546522156.45621565421;
var B = .0001;
这不是一个有效的倍数,但它认为它是:
4.543621254652216e+21 % 10.0000000000=0
是否有一个聪明的技巧来确定一个浮点数是否是另一个浮点数的倍数?或者这是不可能的?
更新:
目标是将用户输入的数字(整数或小数)限制为一定的增量。
- 如果 Increment 为 1,则用户可以输入 1、2、3、4 等。
- 如果增量为 0.5,用户可以输入 0.5、1、1.5、2、2.5 等。
- 如果增量为 .0002,用户可以输入 1,1.001,1.0004,1.0006,但不能输入 1.0001
从逻辑角度来看,给定值是或不是给定增量的有效倍数。