gpt4 book ai didi

javascript - 确定一个 float 是否是另一个 float 的倍数?

转载 作者:行者123 更新时间:2023-12-03 07:26:13 27 4
gpt4 key购买 nike

我需要使用 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 等。
  • 如果 Increment 为 .5,则用户可以输入 .5、1、1.5、2、2.5 等
  • 如果 Increment 为 .0002,则用户可以输入 1,1.001,1.0004,1.0006,但不能输入 1.0001

  • 从逻辑的 Angular 来看,给定的值是或不是给定增量的有效倍数。

    最佳答案

    鉴于您的最后两个示例,例如 4543621235648200192 等,您似乎想要接受 .0001 的整数倍数并拒绝那些不是 的数字。和 您不想使用 .0001 而是使用包含最接近 .0001 的浮点值的变量来执行此操作。

    一般来说,这是不可能的。当您传递其他内容时,算法无法“知道” .0001 的意图。

    如果您更多地限制问题,则可能有解决方案。例如,有可能(也许并不容易)回答这个问题:浮点值 X 是最接近 0.0001 的整数倍的浮点值吗? (换句话说,是否有一个整数 k 使得 .0001 乘以 k 并四舍五入到最接近的浮点值会产生恰好 X?)

    因此,要获得解决方案,您需要进一步描述您的目标。您想要 Step 的任意值的解决方案还是某些值?由于二进制浮点不能足够精确地表示 Step,您有其他方法来描述它吗?例如,它是否总是 .0001 的倍数?您希望接受的倍数始终是最接近精确数学倍数的二进制浮点数,还是可能有其他错误?

    关于javascript - 确定一个 float 是否是另一个 float 的倍数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12429362/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com