我有两个字符串的输入,每个字符串都代表一个非负有理数的小数格式。
给定这两个字符串 x
和 y
,我想检查由 x
表示的数值是否大于由 y
表示的数值。
这两个值可能非常大,并且可以扩展到非常高的精度(即小数点后面有许多位数字)。
因此,我不能依赖于 Number(x) > Number(y)
来完成工作。
相反,我已经实现了以下函数:
function isLarger(x, y) {
const xParts = x.split(".").concat("");
const yParts = y.split(".").concat("");
xParts[0] = xParts[0].padStart(yParts[0].length, "0");
yParts[0] = yParts[0].padStart(xParts[0].length, "0");
xParts[1] = xParts[1].padEnd (yParts[1].length, "0");
yParts[1] = yParts[1].padEnd (xParts[1].length, "0");
return xParts.join("").localeCompare(yParts.join("")) == 1;
}
我已经进行了广泛的测试,通过生成随机输入
x
和y
,并将isLarger(x, y)
的结果与表达式Number(x) > Number(y)
的值进行比较。当然,出于上述原因,我不能依赖于表达式
Number(x) > Number(y)
在每种可能的输入x
和y
中都是正确的。因此,我希望对上述函数进行某种反馈:
- 它有任何注意事项吗?
- 或许有更简单的方法来实现这个功能吗?
x
和y
都设置为(Math.random() * 1000000).toString()
进行调用。然后将其输出与Number(x) > Number(y)
进行比较。结果似乎总是成立的,但正如我所说 - 我怎么能相信Number(x) > Number(y)
呢?此外,正如您所看到的,我的生成输入不包括极大值。 - goodvibrationBigNumber.js
和Decimal.js
,并保持其在“本地”的JS中。 - goodvibration.3
这样的东西?或者在这种情况下,前导零是必需的吗? - Nina Scholz