2017-04-20 47 views
1

我在將一個小數點與PHP插入MySQL時遇到了問題。 該號碼被格式化爲貨幣,存儲在會話變量中。小數點在插入數據庫之後舍入

$_SESSION['total']; 

使用number_format用逗號來代替點給我正確的輸出:

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

現在我需要的變量$量插入到數據庫中,這是像這樣做:

$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); 

如果您的會話變量包含實際的數字,而不是的字符串,你應該直接使用這些。

請注意,使用浮點數可能會導致精度問題/舍入誤差。如果是這樣的話,你應該只使用整數(例如分數,所以285而不是2.85)。

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

您可以使用str_replace函數在數量上刪除「」並插入值,MySQL表如下所示

$_SESSION['total'] = "2,85"; 
$total_in_decimal = str_replace(',', '.', $_SESSION['total']); 
$query = "INSERT INTO testtable VALUES" . "('$total_in_decimal', 'NULL')"; 
$result = $con->query($query);