数学运算符 *, /, +, -, ^ 是否可用于将非零数字转换为 1?

2022-08-30 05:00:14

我正在使用的软件(Oracle Siebel),它只支持带有运算符乘法,除法,减法,加法和XOR(,)的JavaScript表达式。我没有其他运算符,例如或可用。*/-+^!? :

使用上述运算符,是否可以将数字转换为1(如果数字为非零),如果数字已为零,则将其保留为0?该数字可以是正数、零数或负数。

例:

var c = 55;

var d;  // d needs to set as 1

我试过了,但它的计算结果为0。 当为 0 时,需要为 0。c / cNaNcdc

c 是一个货币值,它最多有两个尾随数字和 12 个前导数字。

我正在尝试通过将数字转换为布尔值0或1,然后乘以表达式的其他部分来模拟条件。if


答案 1

使用表达式 。n/n^0

如果不是零:n

 Step    Explanation
------- -------------------------------------------------------------------------------
 n/n^0   Original expression.
 1^0     Any number divided by itself equals 1. Therefore n/n becomes 1.
 1       1 xor 0 equals 1.

如果为零:n

 Step    Explanation
------- -------------------------------------------------------------------------------
 n/n^0   Original expression.
 0/0^0   Since n is 0, n/n is 0/0.
 NaN^0   Zero divided by zero is mathematically undefined. Therefore 0/0 becomes NaN.
 0^0     In JavaScript, before any bitwise operation occurs, both operands are normalized.
         This means NaN becomes 0.
 0       0 xor 0 equals 0.

如您所见,所有非零值都转换为 1,而 0 保持在 0。这利用了在 JavaScript 中为 0 的事实。NaN^0

演示:

[0, 1, 19575, -1].forEach(n => console.log(`${n} becomes ${n/n^0}.`))

答案 2

c / (c + 5e-324)应该工作。(该常量Number.MIN_VALUE,即可表示的最小正数。如果 x 是 0,那正好是 0,如果 x 是非零的(从技术上讲,如果 x 至少是 4.45014771701440252e-308,这是问题中允许的最小非零数 0.01),JavaScript 的浮点数学太不精确,答案不能与 1 不同,所以它将恰好显示为 1。5e-324