JS float 丸めバグ
929 ワード
Stripe API に慣れてきました.これまでのところは順調ですが、今日、この興味深いバグに遭遇しました. Stripe は、セントを使用して通貨金額を表示します (米国にいる場合).明らかに、エンド ユーザーに表示するときは、適切な読み取り可能な USD に変換する必要があります.
また、更新または購入する場合は、API が要求を受け入れるようにセントに再変換する必要があります.
私のセットアップで支払いまたは請求を完了するとき. 33.8 ドルをセントに換算します.しかし、そうすると、結果の金額は正確に 3338 になりませんでした.
このため、Stripe はエラーを返しました.
私の最初の解決策は parseInt を使用することでしたが、3379 が返されました.1 セントが失われたため、これは不十分です.
より満足のいく解決策は、次のことを行うことでした.
別の解決策は、以下のように toFixed を使用して float を丸めることです.
また、更新または購入する場合は、API が要求を受け入れるようにセントに再変換する必要があります.
3380 * 0.01 // converts to $33.8 nothing special here.
私のセットアップで支払いまたは請求を完了するとき. 33.8 ドルをセントに換算します.しかし、そうすると、結果の金額は正確に 3338 になりませんでした.
33.8 * 100 = 3379.9999999999995
このため、Stripe はエラーを返しました.
私の最初の解決策は parseInt を使用することでしたが、3379 が返されました.1 セントが失われたため、これは不十分です.
より満足のいく解決策は、次のことを行うことでした.
33.8.toString().split('.').reduce((a, b) => a * 100 + b * 10) // 3380
別の解決策は、以下のように toFixed を使用して float を丸めることです.
parseInt(33.8 * 100).toFixed()) // 3380
Reference
この問題について(JS float 丸めバグ), 我々は、より多くの情報をここで見つけました https://dev.to/bloodrave_n/js-float-rounding-bug-2631テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol