4

MySQL に値を保存する際に、本当に奇妙な問題に遭遇しました。前提:

金銭的な値(注文の合計など)を格納するために使用するテーブルがありますがDECIMAL(15,8)、たとえば挿入しようとすると:

2,45545345

これは次のように保存されます

2.00000000

MySQL の FORMAT/CAST 関数を試しましたが、それでも同じ出力が得られました。

これは、クエリが生成される方法です。

$db->query("INSERT INTO `random_table_name` SET currency_value = '" . floatval($value) . "'");

私も試しdoublevalましたが、同じ結果です。面白いことに、この同じコードは数週間前に正常に機能していましたが、これを引き起こす可能性のある db 構造または db クラスへの変更を思い出すことができません。

4

2 に答える 2

8

number_formatを使用して、,をに置き換えます.

このような:

number_format($value, 8, '.') // 8 = number of decimals, . = decimal separator

ただし、問題は現在のロケールに関連しているようです。次のことを調べる必要があります:setlocale()localeconv

setlocale(LC_ALL, 'en_US'); // NOT TESTED, read up on the appropriate syntax

これはこれを行うための適切な方法です。代替方法は(以下に提案するように)、を実行するstr_replace(',', '.')ことですが、文字列を出力するたびに逆を実行する必要があります。

ただし、別のオプションがありますが、MySQLロケールをに設定できますen_US

于 2013-01-21T08:25:09.200 に答える
3

を db に挿入する前に,置き換えます。.

$value = str_replace( ',', '.', $value);

これにより、データベースに安全に挿入できる有効な番号が作成されます。または、クエリ内に追加するだけです。

INSERT INTO `random_table_name` SET currency_value = '" . str_replace( ',', '.', $value ) . "'
于 2013-01-21T08:29:26.387 に答える