戦闘へのWebフロントエンドの取得:JS浮動小数点値問題

まず、整数が正しくJSを表現することができます

Math.pow(2,53) //即9007199254740996
"9007199254740996".length //16
9007199254740993  // 9007199254740992

備考:

53 1.2パワー、長さ設定の値ではない
2. 100000000000000の注文の合計数
3.表示超えるが、正常ではない(MAX + 1 = maxと表さ、入力間の16〜21ビット9 + 1、等まで直接的に;)が正しく計算するために使用できません
4.21ディスプレイ1E + 21

安全値(ES6)Number.isSafeInteger(NUM)が決定されます。

Number.isSafeInteger(9007199254740993)  // false (存在一个边界问题)
Number.isSafeInteger(990)  // true
Number.isSafeInteger(9007199254740993 - 990)  // true
9007199254740993 - 990
// 返回结果 9007199254740002
// 正确答案应该是 9007199254740003

第二に、浮動小数点数

9007199254700.3333 //9007199254700.334
"9007199254700.334".length //17(包含小数点)

.000001 //0.000001
.0000001 //1e-7
1.0000001 //1.0000001

9.0071992547409919 //9.007199254740993

備考:

1. 53のパワーが、両側が共に2接合されていない
一緒に切り上げを越え2合計16、
小数点以下の桁数を超える、又は必ずしも上方上記に切断されていない場合3.
3意志0.000001表示部1e-7が、整数によって先行されることはありません

上記だけでいくつかのテスト現象のを表現し、注意を払うと滞在の参照を行います

第三に、ビット(32ビット)

正確に2 ^ 53で表すことができるJS数値が、ビット操作範囲の通常の動作は、32ビットのままであるが、最初のビット(10ビット値に移し、2 ^ 31は、境界となるように、符号ビットであります2147483648)。

~~2147483647
2147483647
~~2147483648
-2147483648
~~2147483649
-2147483647
~~2147483650
-2147483646

備考:

1. JSシフト演算子は以下のとおりです。(|、&、<<、>>、〜、^)、期間の中央値の使用を制限に特に注意を払って

ビット単位の操作を見ることができるように2、過剰は負のバック保存行きます

第四に、ハンドリング2小数点以下の桁数の価格

通常、治療後の算術ターン整数、例えば、100で割ます。

const priceMultiply=(a,b)=>(a*b*100+.5|0)/100; //乘法
priceMultiply(18.12,10) //181.2 //后面不带0的数字
(18.12*10).toFixed(2) //181.20 //后面带0的字符串
web前端开发学习Q-q-u-n:⑦⑧④-⑦⑧③-零①② ,分享学习的方法和需要注意的小细节,不停更新最新的教程和学习方法
(从零基础开始到前端项目实战教程,学习工具,职业规划)

注:ここでは、toFixed()関数の構文に注意しなければなりません。

NumberObject.toFixed(num)

それは、オブジェクトを書くこと数である前に、toFixedを確保する必要があるので、それ以外の場合はエラーになります

//报错情况:
(null).toFixed(2)
(undefined).toFixed(2)
("222.333").toFixed(2)
//特殊:NaN是数字,但是无法取小数,也并不会报错
(NaN).toFixed(2)  //"NaN"

おすすめ

転載: blog.51cto.com/14592820/2463480