数が多すぎる場合のバックグラウンドデータ損失の問題

最近、開発プロジェクトで問題が発生しました。インターフェースから要求されたデータは、ブラウザから返されたデータと一致していません。後で、過剰な数が原因で精度が失われていることがわかりました。

javaの最大値の範囲はjsの最大値の範囲より大きいため、精度が低下する問題が発生する可能性があります

また、ブラウザー開発ツールでプレビューと応答の間に不整合が生じ、応答がソースデータであり、プレビューデータが処理されるため、図に示すように、過剰な数値の精度が失われます。

 

 解決策は、バックグラウンドで文字列処理を使用することです。

 

js精度損失の問題:

コンピュータのバイナリ実装とビット数の制限により、一部の数値は制限された方法で表すことができません。pi 3.1415926 ...、1.3333 ...など、一部の不合理な数値を有限に表現できないのと同じです。JSは、IEEE 754仕様に準拠し、倍精度ストレージ(倍精度)を使用し、64ビットを占有します。

 

(1ビットは符号ビットを表すために使用され、11ビットは指数を表すために使用され、52ビットは仮数を表すために使用されます)

計算にどのような式を使用するかに関わらず、コンピューターの最下部にある特定のデータと操作は、1と0のマシンコードによって実現されます。基盤となる実装メカニズムにより、浮動小数点数をバイナリ表現に変換すると、そのようなデータを小数点で正確に表すことができなくなります。本質は、浮動小数点数をバイナリで表現された最も近い近似値に変換することです。次の例を使用して、2進数に変換したときの浮動小数点数の計算方法を簡単に説明できます。以下に示すように:

 

0.02625 = 0.000001101(バイナリ)、バイナリ表現を正確に取得できないため、「丸め方法」が使用されます(1が入力されるごとに、0ラウンドごとに)。

上記は問題の原理であり、Javaやc#などの多くのコンパイル言語は、浮動小数点数の処理をカプセル化します。したがって、ほとんどの場合、明らかな目に見える問題はありません。js自体はインタプリタ言語として、これには当然の欠点があるようです。


参照リンク:https://blog.csdn.net/summerjx/java/article/details/81983459

 

おすすめ

転載: www.cnblogs.com/gopark/p/12693037.html