このタイプの数値形式をデータベースに挿入したいと考えています。
$value = "20.000,00";
FLOAT
とを試してみましDOUBLE
たが、これを処理できません。どの作品がVARCHAR
?ただし、後で数値を操作し、互いに数値を減算しようとするときにこれを行うと、次のようになります。
$value2 = "15.933,50"; $calc = $value - $value2;
$calc
は今4.067
、そうあるべきです4.066,50
- どうしてこれが正しいのでしょうか?
1 に答える
3
財務数値の場合は、DECIMAL タイプを使用する必要があります。精度は固定されており、浮動小数点数の丸め問題の影響を受けません。
金額を VARCHAR または FLOAT に格納しないでください。
データベースに を導入したい場合は$value
、数値を導入できるように解析する必要があります。
$fmt = new NumberFormatter( 'da_DK', NumberFormatter::DECIMAL );
$num = $fmt->parse($value, NumberFormatter::TYPE_INT32)
DBから取得した数値を「20.000,00」として表示するには、次を使用できます
$display_value = $fmt->format($num);
編集 :
NumberFormatter を使用できない場合は、これを使用して DECIMAL フィールドに導入できる文字列を作成できます (float フィールドにも導入できますが、使用しないでください)。
$v = str_replace(',', '.', str_replace('.', '', $value));
これは、データベースが理解できる変更"20.000,00"
です。"20000.00"
ただし、データベースに文字列を数値として解析するように要求することは常に危険です (後でロケールを変更する可能性があります)。PHP で数値を解析し、ロケールを明示的に指定することをお勧めします。
于 2012-09-23T11:46:42.290 に答える