可以使用数学运算符 \*、/、、-、^ 将非零数字转换为 1 吗?

新手上路,请多包涵

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

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

例子:

 var c = 55;

var d;  // d needs to set as 1

I tried c / c , but it evaluates to NaN when c is 0. d needs to be 0 when c 为 0。

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

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

原文由 yas 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 244
2 个回答

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

原文由 Joseph Sible-Reinstate Monica 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用表达式 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 中 NaN^0 为 0 的事实。

演示:

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

原文由 CRice 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题