Laravel保持舍入数字



我有一个laravel项目,由于某些原因,当将数字保存到数据库中时,它总是四舍五入。

这是我的模型:
/**
* Adds a pur order.
*
* @param      <array>   $data   The data
*
* @return     boolean , int id purchase order
*/
public function add_pur_order($data){
$data['order_date'] = to_sql_date($data['order_date']);
$data['delivery_date'] = to_sql_date($data['delivery_date']);
$data['datecreated'] = date('Y-m-d H:i:s');
$data['addedfrom'] = get_staff_user_id();
if(isset($data['pur_order_detail'])){
$pur_order_detail = explode (',', $data['pur_order_detail']);
unset($data['pur_order_detail']);
$es_detail = [];
$row = [];
$rq_val = [];
$header = [];
$header[] = 'item_code';
$header[] = 'unit_id';
$header[] = 'unit_price';
$header[] = 'quantity';
$header[] = 'into_money';
$header[] = 'tax';
$header[] = 'total';
$header[] = 'discount_%';
$header[] = 'discount_money';
$header[] = 'total_money';
for ($i=0; $i < count($pur_order_detail); $i++) {

$row[] = $pur_order_detail[$i];

if((($i+1)%10) == 0){
$rq_val[] = array_combine($header, $row);
$row = [];
}
}
foreach($rq_val as $key => $rq){
if($rq['item_code'] != ''){
array_push($es_detail, $rq_val[$key]);
}
}
}

if(isset($data['dc_total'])){
$data['discount_total'] = reformat_currency_pur($data['dc_total']);
unset($data['dc_total']);
}
if(isset($data['dc_percent'])){
$data['discount_percent'] = $data['dc_percent'];
unset($data['dc_percent']);
}
$this->db->insert(db_prefix() . 'pur_orders', $data);
$insert_id = $this->db->insert_id();
if ($insert_id) {
// Update next estimate number in settings
$total = [];
$total['total'] = 0;
$total['total_tax'] = 0;
$total['subtotal'] = 0;

foreach($es_detail as $key => $rqd){
$es_detail[$key]['pur_order'] = $insert_id;
$total['total'] += $rqd['total_money'];
$total['total_tax'] += ($rqd['total']-$rqd['into_money']);
$total['subtotal'] += $rqd['into_money'];
}
if($data['discount_total'] > 0){
$total['total'] = $total['total'] - $data['discount_total'];
}
$this->db->insert_batch(db_prefix().'pur_order_detail',$es_detail);
$this->db->where('id',$insert_id);
$this->db->update(db_prefix().'pur_orders',$total);
return $insert_id;
}
return false;
}

我遇到的问题与数量有关. 如果我输入20.10(只是一个示例,但适用于任何十进制数),我最终在数据库中保存的值仍然是20。

此外,我还看到将quantity表(之前设置为varchar)更改为DECIMAL,但结果相同。

解决这个问题的最好方法是什么?这只适用于数量。如有专家帮助,不胜感激,谢谢。

您应该使用DECIMAL(X,Y)X为总长度,Y为您希望保留的小数位数。

将来当你试图确保数据类型的完整性时,使用string可能会给你带来更多问题。

https://www.w3schools.com/sql/sql_datatypes.asp

最新更新