10 進数値を四捨五入する場合の問題
概要
Ruby on Rails、Jquery、Postgres DB(10進数列を使用)に組み込まれたテスト請求アプリケーションを構築しています。
これは私が値を保存している以下の方法ですが、それは値を保存する方法ではないと思います
製品 1: 57.5
料金: 1.7249999999999999
S-Tax: 0.13799999999999998
C税: 4.6
合計: 63.97
ここでは、フォームを送信するときに合計以外の値を四捨五入していません。四捨五入しない場合、合計は 63.963 になります。 したがって、この丸めを合計に対してのみ実行し、他の丸めに対しては実行しないと問題が発生します。一部の国では精度 2 を使用する必要があり、その他の国では精度 3 を使用する必要があります。
さらに、これがこれらの値を DB に保存する正しい方法であるかどうかを知りたいです。
各列(Charge、S-Tax、C-Tax、Total)を四捨五入するなどのルールはありますか?それとも精度とスケールに関するルールはありますか?それともこれを整数に変換する必要がありますか?
整数を使用する場合、四捨五入して整数に変換する必要がありますか?
送信するときに保存すべき正しいデータは何ですか?これはしばらくの間悩まされているので、誰かが提案できれば素晴らしいでしょう。
解決策
レールを使用している場合は、カラム自体に精密スケールを配置できます。
「料金、S-Tax、C-Tax、Total」で移行を変更できます!
例えば
t.decimal "s_tax", precision: 2, scale: 3, null: false