2012-02-06 5 views
6

うまくいけば、簡単な質問です。私のデータベースにDECIMALという列があります。値は非常に小さい小数です - この値を合計すると、すべての行が1に等しくなります。MySQL Decimalデータ型をPHPでどのように使うべきですか?

この値をPHPアプリケーションで使用して表示し、計算を実行して、データベース。

PHPはintegerとタイプしか持っていないので、計算や表示の正確さを失わないように、phpでその値を使用する最良の方法は何ですか?

  • は、文字列として値を保持し、計算のためのBC数学を使用
  • キャストfloatとして数 - 私はPHPの浮動小数点数はかなりの数に正確に知っている
  • は、値を変換します(OSによって異なります)指数を覚えている関数を使った整数
  • 他に何か?あなたは、計算の精度を失い、表示するためのnumber_format出力を使用しないようにfloatために行く必要があり

おかげ

+0

文字列として保存すると精度は保たれますが、一度計算を開始するとすべてのベットがオフになります。 –

+3

私は[BC Math](http://www.php.net/manual/en/intro.bc.php)を使用します。 –

答えて

0

...

注:
それは本当にあなたのニーズに依存し、どのようにあなたです2番目の数字の後に仮数部を切り捨てたり、何らかの丸めをしたい場合は、出力を処理してください。:(ちょうどSELECT CAST(2.10/1.10 as DECIMAL(10,2))ような結果を丸める)1.91もたらす

更新を number_format(2.10/1.10, 2)を用いた以外は実施例2.10/1.10のスケール2とBC数学の使用に

1.90を生成します。 コメントに記載されているとおり、計算の精度を失うことがあります。 MySQL自体で任意精度の計算を行うほうがおそらく良いでしょう。そうすれば、数学演算中に何も失われていないことを確認できます。

+0

なぜ、何が起こるのか、賛否両論は何ですか? –

+1

@Bendosが任意精度の算術演算を行いたい場合、浮動小数点数を使うのは良い考えではありません。計算のステージに浮動小数点形式で表現できない数値が含まれる場合、精度は失われます。 – Hammerite

+0

@ハメリテット、ありがとう。この回答を更新しました –

関連する問題