一、遇到的问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
| function calculate(selfsocores, othersocores, result, color, mult) { let finalsocores; let factor; let expect; let gap; let variable; switch (color) { case PLAY_COLOR.RED: variable = -100; break; case PLAY_COLOR.BLACK: variable = 100; break; default: variable = 0; break; } if (selfsocores < 1000) { factor = 120; } else if (selfsocores < 1400) { factor = 60; } else if (selfsocores < 1800) { factor = 30; } else if (selfsocores < 2000) { factor = 25; } else if (selfsocores < 2200) { factor = 20; } else if (selfsocores < 2400) { factor = 15; } else { factor = 10; } gap = ((othersocores - selfsocores) + variable) / 400; expect = 1 / (Math.pow(10, gap) + 1); console.log("factor:", factor, "variable:", variable, "expect:", expect, "gap:", gap, factor * (result - expect)); finalsocores = Math.floor(selfsocores + mult * parseInt(factor * (result - expect))); return finalsocores; }
|
1 2 3 4 5 6 7
| 输入为: selfsocores = 5083, othersocores = 1818, result = 1, color = 1, mult = 1; 输出为:factor: 10 variable: 100 expect: 0.999999987767929 gap: -7.9125 1.223207102274415e-7 1 5084
其中 factor * (result - expect) 的值为 1.223207102274415e-7,远小于1,但 parseInt(factor * (result - expect)) 却得到结果1
|
二、科学计数法
JavaScript中对于极大或者极小的数,可以用科学计数法e来表示的浮点数值来表示。科学计数法允许字母e 或 E 的后面,跟着一个整数,表示这个数值的指数部分。
以下两种情况,JavaScript 会自动将数值转为科学计数法表示
1 2 3 4 5 6 7 8 9 10 11
| (1) 小于1且小数点后面带有6个0以上的浮点数值: JavaScript 代码: 0.0000003 // 3e-7 0.00000033 // 3.3e-7 0.000003 // 0.000003
(2) 整数位数字多于21位: JavaScript 代码: 1234567890123456789012 //1.2345678901234568e+21 1234567890123456789012.1 //1.2345678901234568e+21 123456789012345678901 //123456789012345680000
|
三、parseInt函数
1 2 3 4 5
| 语法:parseInt(string [ , radix])
string 要被解析的值。如果参数不是一个字符串,则将其转换为字符串(使用ToString 抽象操作)。字符串开头的空白符将会被忽略
radix 从2到36,表示字符串的基数。请注意,10不是默认值!
|
由于某些数字在其字符串表示形式中使用e字符(例如 6.022×23 表示 6.022e23 ),因此当对非常大或非常小的数字使用数字时,使用 parseInt 截断数字将产生意外结果。
1 2
| console.log(parseInt(0.0000015)); console.log(parseInt(0.00000015));
|
官方定义: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/parseInt