问个mysql方面的问题?

我是想将一个数的结尾0去掉,比如
0.00000063600 变成 0.000000636
比如
300.000000 变成 300
但我用
select 0+cast(0.00000063600 as char) as price
在 navicate 执行是对的,得到 0.000000636,
为啥我在laravel上用
$price = DB::select(‘select 0+cast(0.00000063600 as char) as price’);
print_r($price);

Array (
[0] => stdClass Object (
    [price] => 6.36E-7
    )
)

帮我转成了科学记数法形式了,有没有方法不要让它转成科学记数法形式的?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 6
function sctonum($num, $double = 10){
    if(stripos($num, "e") !== false){
        $a   = explode('e', strtolower($num));
        $str =  bcmul($a[0], bcpow(10, $a[1], $double), $double);
        $num =  rtrim(rtrim($str, '0'), '.');   //去除小数后多余的0
    }
    return $num;
}
2年前 评论
donggan (楼主) 2年前
Smilephp (作者) 2年前

mysql别用浮点数存价格啊,有误差

2年前 评论
htdocs 1年前

浮点型精度的问题。价格最小单位是1分,要不就使用decimal类型,设置保留两位小数——decimal(15,2),但是有个要求,存入的数必须是真正的小数两位,例如,批发价是0.134,那么存入后会变成0.13(会四舍五入),因此使用decimal并且要避免精度丢失的话就要强制卡小数位数;
还有一种情况,以微信支付为例,微信支付最小单位为1,也就是1分,因此可以使用整型存储价格,这样就不用担心精度丢失的问题,但是需要注意的时候,接口返回的话需要转换一下显示。

2年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!