为了账号安全,请及时绑定邮箱和手机立即绑定

是否存在仅允许显示特定类型数字的“if 语句”?

是否存在仅允许显示特定类型数字的“if 语句”?

慕妹3146593 2023-02-17 16:43:51
我在 w3schools.com 上找不到比较运算符,它检查生成的数字是否等于某种类型的数字。有没有一种方法可以if statement在不改变innerHTML参考属性的情况下制定一个 .例如,在我的代码的以下过于简化的版本中:它应该只显示像 6 、 3.1 、 4.05 、 53.65 这样的数字(这些数字在小数点后有 2、1 或没有数字,并且以 0.05 步计算)function F1() {  x = document.getElementById("x").innerHTML = Math.random() * 100;  if (x !== "0.05") {    F1();  }  if (x !== "0.1") {    F1();  }  if (x !== "1") {    F1();  }}<button onclick="F1()"> New </button><p id="x"></p>
查看完整描述

2 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

使用取模运算符

但是,除以分数 (.05) 可能会产生不完美的结果,因此最好乘以 20 并检查是否有分数提醒(模数 1)。


@Thomas Sablik 的回答也有效,并解释了乘以 20。


const isPoint05 = x => x * 20 % 1 === 0;


const test = (...args) => args.forEach(x => console.log(x, isPoint05(x)));


test(6, 3.1, 4.05, 53.65, 3.254, 6.22, 7.77, 7.33);


为了说明分数除法的挑战(取决于 JavaScript 实现,我在 chrome 上得到 0.049999999999999614):


console.log(7 % 0.05);


查看完整回答
反对 回复 2023-02-17
?
BIG阳

TA贡献1859条经验 获得超6个赞

您可以将数字乘以 20 并四舍五入:


if (Math.round(x * 20) !== x * 20) {

    // not counted in 0.05 steps, eg. 1.234

} else {

    // counted in 0.05 steps, eg. 1.25

}

此 if 语句检查“这些数字是否在小数点后有 2、1 或没有数字,并且以 0.05 步计算”,因为以 0.05 步计算的数字乘以 20 是整数(Math.round(x * 20) !== x * 20为 false),例如:


0.05 * 20 = 1

1.25 * 20 = 25

和其他数字不是整数(Math.round(x * 20) !== x * 20是真的),例如:


0.04 * 20 = 0.8

1.251 * 20 = 25.2

但是将这个 if 语句与 with 一起使用是一个坏主意,因为生成太多其他Math.random数字的可能性很高,以至于递归会导致堆栈溢出。Math.random


更好的方法是生成您想要的数字


x = Math.round(Math.random() * 20 * 100) / 20


查看完整回答
反对 回复 2023-02-17
  • 2 回答
  • 0 关注
  • 76 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信