Techioz Blog

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