2012-02-24 25 views
0

私はあなたがポイントの中でポイントを分割したいと思う3つのものを選ぶことができるプログラムに取り組んでいます。なぜ小数は正しく加算されませんか?

たとえば、アクションで4点が得られ、4点が選択した3点の間で分割されているとします。

この場合、3つのものはそれぞれ1.33333 ...ポイントを取得します。

私のデータベースには、1.33として保存されています。

しかし、私がそれらを持ち出すと、それは3.99まで計算されます。

理解できる。

しかし、これを避けるには、1.34ポイントのものを与えないでください。

+0

ラウンドアップ?あなたはこれをやりたいことを明確に説明していない、それはあなた次第です。これはコーディングの問題ではありません。 –

+0

なぜあなたは合計を丸めることができませんか? –

+0

あなたはデータベースにも合計をキャッシュすることができるので、集計を追加する代わりに、集計 –

答えて

5

小数点以下2桁に切り捨てるのではなく、フルフロート/ダブルをデータベースに格納します。切り詰める時間は、ユーザに値を表示するときです。ですが、実際の値ではなく、表示された文字列を切り捨てるだけです。

浮動小数点値は、計算の厄介な飲酒叔父です。彼らを自分のものにして、公衆の目に当てるときにそれらを掃除してください。

+3

を参照してください。 "浮動小数点値は厄介な酔っ払いのおじさんです。公衆の目に提示するときに。 - それは私が間違いなく盗むことになる素晴らしい引用です –

+0

Truncまたは* round *、私は適切と言うべきです。 – QED

0

小数点第3位は、表示用ではなく、精度の追跡にのみ使用します。誰かが3つのポイントのうち4ポイントを分けた場合は、1.333として保存します。一方、あなたが3つのオブジェクトのうち3.99を割り切った場合、それを1.33として保存します。バックを計算すると3.99でなく3.999になります切り上げないことを知っている。

2

この場合、浮動小数点数はロッシーになります。整数の分子と分母を扱っている場合、なぜ分数として数値を格納しないのですか? Pear's Math Fraction libraryを使用するか、何かを自分で書くことができます。

関連する問題