1

MYSQLデータベースに小数を挿入していますが、DBをDECIMAL(10,4)に設定したにもかかわらず、DBに格納される値は丸められます。たとえば、割引を6.5に設定すると、DBはそれを7として記録します。

私の質問は:

$save = sprintf("
INSERT INTO discount
SET         am_discount = %d,
                tx_discount = '%s'
",
    $_POST['am_discount'],
    mysql_escape_string($_POST['tx_discount'])
);

am_discountフィールドを%uとに設定してみました%fが、違いはないようです。

前述したように、MYSQL DBのam_discountフィールドはに設定されてDECIMAL (10,4)おり、(10,2)と(8,2)も試しました。

私は何が欠けていますか?

4

4 に答える 4

1

試す :

$save = sprintf("INSERT INTO discount  SET am_discount = '".$_POST['am_discount']."',
                tx_discount = '".mysql_escape_string($_POST['tx_discount'])."' ");
于 2012-11-05T12:14:28.083 に答える
1

誰かが私を支持することができれば、それはデータベーステーブルの列のプロパティの問題のようです。

テーブルの列のプロパティを「Float」に変更してください。

MySQLでは、非標準の構文(FLOAT(M、D)またはREAL(M、D)またはDOUBLE PRECISION(M、D))が許可されています。ここで、「(M、D)」とは、合計M桁までの値を格納できることを意味し、そのうちD桁は小数点以下の場合があります。たとえば、FLOAT(7,4)として定義された列は、表示されると-999.9999のようになります。MySQLは値を格納するときに丸めを実行するため、999.00009をFLOAT(7,4)列に挿入すると、おおよその結果は999.0001になります。

参照: http ://dev.mysql.com/doc/refman/5.0/en/floating-point-types.html

于 2012-11-05T12:16:16.110 に答える
1

これは、データベーステーブルの列のプロパティの問題ではありません。10進数が正しい列タイプです。

DECIMALまたは整数列への挿入の場合、ターゲットは正確なデータ型であるため、挿入される値が正確であるか近似であるかに関係なく、丸めでは「ゼロから半分を丸める」が使用されます。

詳細については、 http://dev.mysql.com/doc/refman/5.0/en/precision-math-rounding.htmlを参照してください。

于 2014-01-18T00:19:08.573 に答える
0

実際、これはデータベースとは何の関係もありません。これは%dのsprintfの動作です。

%d The argument is treated as an integer and presented as a (signed) decimal number.
于 2020-07-31T09:48:46.537 に答える