2017-04-20 10 views
1

PHPで小数点以下をMySQLに挿入する際に問題が発生しました。 数値は通貨としてフォーマットされ、セッション変数に格納されます。DBに挿入した後に小数点以下を切り捨てます

$amount= number_format((float)$_SESSION['total'], 2, ",", ''); 
echo $amount; 
//output = 2,85 

は、今私はそうのように行われているデータベースの中に変数$量を挿入する必要があります:

コンマでドットを置き換えることをnumber_formatを使用し

$_SESSION['total']; 

は私に正しい出力を提供します

$query = "INSERT INTO testtable VALUES" . "('$amount', 'NULL')"; 
$result = $con->query($query); 

挿入時には、数字は「2,00」と挿入され、「2,85」ではありません。私もnumber_formatなしでそれをしようとしたが、私は同じ結果を得る。

行は小数点(10,2)として設定されます。

どのように変数エコーは正しくできますが、挿入はそれを丸めますか?

答えて

0

number_format()の出力が文字列であり、問​​題は、MySQL/PHPはコンマを知らないことを,小数点として、あなたの文字列2,85が有効な数値ですあなたの文字列の最初の文字を使用して数にキャストされています文字。

あなたが任意の計算やデータベースの挿入を行う前に、あなたが.,を交換し、フロートにそれをキャストして実数にあなたの文字列を変換する必要があります

$number = (float) str_replace(',', '.', $amount); 

あなたのセッション変数ではなく、実際の数字が含まれている場合これらを直接使用する必要があります。

浮動小数点を使用すると、精度の問題や丸め誤差が発生する可能性があることに注意してください。そのような場合は、整数だけを使用する必要があります(たとえば、金額はセント、2.85ではなく285)。

0

カンマではなく、ポイント区切り記号を使用して挿入する必要があります。

$amount = number_format((float)$_SESSION['total'], 2, ".", ''); 
echo $amount; // prints 2.85 
$query = "INSERT INTO money (total,second_field) VALUES" . "($amount, 'NULL')"; 
$result = $conn->query($query); 
0

ユーザーがわかりやすいようにnumber_format()を使用します。文中で $ amount = number_format((float)$ _ SESSION ['total']、2、 "、"、 ''); $量は小数点型でMySQLフィールドに文字列の文字列と挿入で挿入警告

1行のレコードを挿入します。警告:#1265は、データが行に 「decimal_test」列の切り捨て1

$_SESSION['total'] = "2,85"; 
$total_in_decimal = str_replace(',', '.', $_SESSION['total']); 
$query = "INSERT INTO testtable VALUES" . "('$total_in_decimal', 'NULL')"; 
$result = $con->query($query); 
以下のようにあなたが数「」削除してMySQLのテーブルに値を挿入するstr_replaceを使用することができ

関連する問題