2016-12-03 19 views
0

私は、ユーザーが通貨を選ぶことができるお金関連のアプリケーションを作成しようとしていました。私が試したMysqlのデータ型は小数点(19,4)です。今問題は、3つの精度を必要とする通貨が少なく、2つが必要です。 例: オマーンrialには3つの精度が必要です。すなわち1000baisa = 1オマーンrialである。したがって私の顧客は6.783オマーンrialに入ることができます。 私の米国の顧客は100セント= 1ドルの2つの精度しか必要とせず、5.50に入るかもしれません。お金のためのMysqlのデータ型

10進数(19,4)を使用してこれら2つのエントリをデータベースに挿入すると、それぞれ6.7830と5.5000として保存されます。

本当の痛みは、私がオマーンの欄に余分な0を表示したくないので、エントリーを表示する必要があるときです。私もフロートを試みましたが、最後の数字は時折四捨五入されています。

四捨五入や余分なゼロのない正確な入力をそのまま保存できるmysqlデータ型はありますか?そのようなエントリがない場合、どうすればそれを不安にすることができますか?

答えて

0

正確な表現を格納するためにVARCHARを使用できますが、数値を文字列として格納するためにより多くのバイトを必要とするため、推奨しません。とにかく値を計算すると、数値に変換されます。

DECIMAL(19,4)を使用し、アプリケーションコードで値をフォーマットして、適切な数字で表示することをお勧めします。すべてのプログラミング言語には、格納された値に関係なく、出力書式を制御できるように、printf()のような機能があります。

+0

適切な数字はどのように追跡できますか?ピリオドの後に桁数を追跡するための新しいcoloumnを作成する必要がありますか?私は6.783の場合に3を節約する必要がありますか? – Rishad

+1

大部分の精度が必要な通貨で使用される精度で列の型を宣言します。他のすべての通貨もこのデータタイプを使用する可能性があります。アプリケーションには、通貨タイプによって異なる値を書式設定するロジックが含まれている必要があります。 –

+0

'DECIMAL(..、4)'は '(..、2)'よりも1バイトだけ大きいので、多くのスペースを無駄にしないことに注意してください。私は不要な末尾のゼロを取り除くことはアプリに任されていることに同意する。 –

関連する問題