2 回答

TA貢獻(xiàn)1833條經(jīng)驗(yàn) 獲得超4個(gè)贊
使用取模運(yùn)算符
但是,除以分?jǐn)?shù) (.05) 可能會(huì)產(chǎn)生不完美的結(jié)果,因此最好乘以 20 并檢查是否有分?jǐn)?shù)提醒(模數(shù) 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);
為了說明分?jǐn)?shù)除法的挑戰(zhàn)(取決于 JavaScript 實(shí)現(xiàn),我在 chrome 上得到 0.049999999999999614):
console.log(7 % 0.05);

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個(gè)贊
您可以將數(shù)字乘以 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 語句檢查“這些數(shù)字是否在小數(shù)點(diǎn)后有 2、1 或沒有數(shù)字,并且以 0.05 步計(jì)算”,因?yàn)橐?0.05 步計(jì)算的數(shù)字乘以 20 是整數(shù)(Math.round(x * 20) !== x * 20為 false),例如:
0.05 * 20 = 1
1.25 * 20 = 25
和其他數(shù)字不是整數(shù)(Math.round(x * 20) !== x * 20是真的),例如:
0.04 * 20 = 0.8
1.251 * 20 = 25.2
但是將這個(gè) if 語句與 with 一起使用是一個(gè)壞主意,因?yàn)樯商嗥渌鸐ath.random數(shù)字的可能性很高,以至于遞歸會(huì)導(dǎo)致堆棧溢出。Math.random
更好的方法是生成您想要的數(shù)字
x = Math.round(Math.random() * 20 * 100) / 20
添加回答
舉報(bào)