「Nodejs開発暗号化貨幣」の14:Js処理データ計算の欠陥と解決策
前言
Jsはもともと先端ブラウザで使われていた言語で、算数演算が苦手で、多くの仲間が次のように挙げられたことがあると思います.今、私たちはNodejsを通じて前後にJsを使って開発したいです.この欠陥は明らかに深刻です.
この問題を徹底的に解決するために、私は特に関連している問題を収集して、そして源のコミュニティから1種の良い解決方法を探し当てます.
Jsの欠陥
(1)パースインサート()注意して使用する
結論:parseIntはNumberとIntegerを変換するツールとして使わないでください.
問題:デフォルトでは、0.00000 01(1 e-7)未満の数字をStringに変換すると、jsは科学的な記号法に変えて、この数をparseInt操作すると問題が発生します.すなわち、
よくある問題は浮動小数点の比較があります.
これは、parseInt(0.00000 08)==8を説明することができる.
結論:第三者カバンを使用します.
問題:
もし、第三者アプリから提供されたデータを呼び出したら、次のようになります.
解析:浮動小数点範囲: 正確な整数範囲: 配列インデックス及びビット操作:
node-bignumを使って、住所:https://github.com/Ebookcoin/node-bignum
コミュニティにはたくさんのビッグnumberカバンがありますが、node-bignumだけが上記の問題を完璧に解決できます.bignumber.jsなどは小数点以下の問題を解決できません.
リンク
ソースの住所:https://github.com/imfly/bitcoin-on-nodejs
電子書籍の読み:http://bitcoin-on-nodejs.ebookchain.org
参照
https://cnodejs.org/topic/4ff679c84764b7290214460a
https://cnodejs.org/topic/4fb3722c1975fe1e132b5a9a
公式サイト:http://ebookchain.org
億書が集まって、国内で一番いいブロックチェーン人材コミュニティを作っています.ブロックチェーンクラブに参加することを歓迎します.http://chainclub.org
開発交流群:18450616
Jsはもともと先端ブラウザで使われていた言語で、算数演算が苦手で、多くの仲間が次のように挙げられたことがあると思います.今、私たちはNodejsを通じて前後にJsを使って開発したいです.この欠陥は明らかに深刻です.
この問題を徹底的に解決するために、私は特に関連している問題を収集して、そして源のコミュニティから1種の良い解決方法を探し当てます.
Jsの欠陥
(1)パースインサート()注意して使用する
結論:parseIntはNumberとIntegerを変換するツールとして使わないでください.
問題:デフォルトでは、0.00000 01(1 e-7)未満の数字をStringに変換すると、jsは科学的な記号法に変えて、この数をparseInt操作すると問題が発生します.すなわち、
parseInt(0.0000008) === 8
解析:よくある問題は浮動小数点の比較があります.
console.log((0.1 + 0.2) == 0.3); // false
console.log((0.1 + 0.2) === 0.3); // false
console.log(0.1 + 0.2); // 0.30000000000000004
また、parseInt(1000000000000000000000.5, 10); // 1
ParseIntの最初のタイプは文字列ですので、入ってきたパラメータを文字列に変換します.つまり、String(1000000000000 000000 000 000 000 000 000 000 000,000,.5)の結果は「1 e+21」です.parseIntは「e」を数字として扱っていないので、変換後は停止します.これは、parseInt(0.00000 08)==8を説明することができる.
String(0.000008); // '0.000008'
String(0.0000008); // '8e-7'
(2)取り扱いのデータ範囲に注意する結論:第三者カバンを使用します.
問題:
もし、第三者アプリから提供されたデータを呼び出したら、次のようになります.
{"content": "Hi", "created_at": 1340863646, "type": "text", "message_id": 5758965507965321234, "from_user": "userC"}
その中のメッセージidは19桁のnumberタイプのデータです.JSON.parseでJSONオブジェクトに解析してその中の情報を取得する方法は以下の通りです.var jsonStr = '{"content": "Hi", "created_at": 1340863646, "type": "text", "message_id": 5758965507965321234, "from_user": "userC"}';
var jsonObj = JSON.parse(jsonStr);
console.log(jsonObj.message_id);// :5758965507965321000
よく見たら最後の三人は000
になりました.16ビットを超えるデータは、解析されると他の桁は0
になります.解析:
±1.7976931348623157 × 10 308
±5 × 10 −324
−9007199254740992 and 9007199254740992 ( 2 53 )
2 31
最終解決策node-bignumを使って、住所:https://github.com/Ebookcoin/node-bignum
コミュニティにはたくさんのビッグnumberカバンがありますが、node-bignumだけが上記の問題を完璧に解決できます.bignumber.jsなどは小数点以下の問題を解決できません.
リンク
ソースの住所:https://github.com/imfly/bitcoin-on-nodejs
電子書籍の読み:http://bitcoin-on-nodejs.ebookchain.org
参照
https://cnodejs.org/topic/4ff679c84764b7290214460a
https://cnodejs.org/topic/4fb3722c1975fe1e132b5a9a
公式サイト:http://ebookchain.org
億書が集まって、国内で一番いいブロックチェーン人材コミュニティを作っています.ブロックチェーンクラブに参加することを歓迎します.http://chainclub.org
開発交流群:18450616