web-dev-qa-db-ja.com

浮動小数点と10進数を使用する場合

このAPIを構築しています。データベースには、次のいずれかを表す値が格納されます。

  • 割合
  • 平均
  • 割合

正直に言って、範囲が0から100%の間の数値を表現する方法がわかりません。それは

  • 0.00-1.00
  • 0.00-100.00
  • 私が知らない他の選択肢

そのための明確な選択肢はありますか?データベースで0から100%パーセントまでの何かを表すグローバルな方法は?さらに進んで、float型またはdecimal型の正しい型は何ですか?

ありがとうございました。

15
Amanda Ferrari
mysql> create table numbers (a decimal(10,2), b float);
mysql> insert into numbers values (100, 100);
mysql> select @a := (a/3), @b := (b/3), @a * 3, @b * 3 from numbers \G

*********************************************************************

@a := (a/3): 33.333333333
@b := (b/3): 33.333333333333
@a + @a + @a: 99.999999999000000000000000000000
@b + @b + @b: 100

小数は、この場合に行うべきことを正確に実行し、残りを切り捨てて、1/3の部分を失いました。

したがって、合計の場合は小数の方が適していますが、除算の場合は浮動小数点のほうが適しています。つまり、DECIMALを使用しても、いかなる方法でも「フェイルプルーフ演算」が行われることはありません。

これがお役に立てば幸いです。

0
vishpatel73

Tsqlの場合:Float、0.0は0として格納され、小数点以下の桁を定義する必要はありません。 Float(4,2)と書く必要はありません。 Decimal、0.0は0.0として保存され、decimal(4,2)のように定義するオプションがあります。0.00〜1.00をお勧めします。これを行うことにより、100を掛けずにそのパーセントの値を計算でき、レポートしてからデータ型を設定できますMS Excelおよび0.5 -> 50%のような他のプラットフォームビューと同じパーセントの列。

0
Arsalan Khan

10進数:金融アプリケーションの場合、10進数型を使用することをお勧めします。高精度で丸め誤差を回避しやすいためです。

Double:Double型は、金額の処理を除いて、実際の値に最もよく使用されるデータ型です。

Float:処理能力に対する要求が非常に高いため、主にグラフィックライブラリで使用され、丸めエラーに耐えられる状況も使用されます。

リファレンス: http://net-informations.com/q/faq/float.html

0
Prabodha

Floatとdecimalの違いは精度です。 Decimalは、10進数形式の精度内で任意の数値を100%正確に表すことができますが、Floatはすべての数値を正確に表すことができません。

たとえば、10進数を使用します。財務関連の値とフロートを使用します。グラフィカル関連値

decimalは正確な精度を維持するためのものなので、表示と同じ方法で保存する場合はdecimal(5,2)の使用をお勧めします。 ( https://dev.mysql.com/doc/refman/8.0/en/fixed-point-types.html を参照)

浮動小数点値は概算値であり、正確な値として格納されていないため、比較でそれらを正確なものとして処理しようとすると、問題が発生する可能性があります。また、プラットフォームまたは実装の依存関係の影響を受けます。

https://dev.mysql.com/doc/refman/8.0/en/floating-point-types.html

SQLステートメントで記述された浮動小数点値は、内部的に表現された値と同じでない場合があります。

DECIMALカラムの場合、MySQLは65桁の10進数の精度で演算を実行します。これにより、最も一般的な不正確な問題が解決されます。

https://dev.mysql.com/doc/refman/8.0/en/problems-with-float.html

0
jhoanna