Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PHP中保留计算后的小数位?_Php_Laravel_Laravel 5 - Fatal编程技术网

如何在PHP中保留计算后的小数位?

如何在PHP中保留计算后的小数位?,php,laravel,laravel-5,Php,Laravel,Laravel 5,我有一个数据库,它将产品成本存储为(十进制)9,2,并以列的形式命名为成本 我已经创建了一个购物车控制器,它可以完美地工作。在确保购物车有产品之后,我通过产品的内容循环计算给定产品和数量的总成本 $total = 0; foreach(session('cart') as $key => $product) $total = $total + (\DB::table('product_list')->where('id', $key)->get()->first(

我有一个数据库,它将产品成本存储为
(十进制)9,2
,并以列的形式命名为
成本

我已经创建了一个购物车控制器,它可以完美地工作。在确保购物车有产品之后,我通过产品的内容循环计算给定产品和数量的总成本

$total = 0;
foreach(session('cart') as $key => $product)
    $total = $total + (\DB::table('product_list')->where('id', $key)->get()->first()->cost * $product[0]['quantity']);
我遇到的问题是小数点被忽略了。如果成本是
150.00
,我有
1
数量,那么总数是
150
,没有小数点后两位

我尝试过使用它,它是专为十进制积分与数学,但这给了我同样的输出。我还尝试使用
四舍五入($total,2)
来获取最接近的2位小数,如果没有,则
.00
,但这也不起作用

是否可以确保在使用任何数学查询后保留这些小数位,或者是否可以在SQL查询生成器中将所有成本相加


提前感谢。

使用
printf
$s=sprintf
将数字转换为字符串:

printf("%.02f", 150.00);
请尝试以下方式使用
number\u format()

echo number_format("150",2);
打印时间:150.00

工作小提琴

数字格式


使用分组的千来格式化数字

您需要区分数据存储和显示给用户的格式化输出。后者是您要修改的。您可以这样做,例如,使用
number\u格式(150,2)问题是,我需要保留小数位(
150.00
在示例中),因为我使用Stripe PHP创建的付款预计
15000
为150.00英镑<代码>150
将在我的条纹费用@misorude中支付1.50英镑,然后你需要将其乘以100。小数点在将其传递到条带时不会改变它。@RolandStarke将其更新为
$total=$total+number\u格式((\DB::table('product\u list')->where('id',$key)->get()->first()->cost*(int)$product[0]['quantity']),2)
如果我回显
$total
它仍然是
150
,没有小数点。我是否也需要使用
echo number\u格式($total,2)
?我不想直接打印结果。我需要将成本乘以数量,并将其附加到我的总变量中
0+(150.00*1)
是我正在做的测试,但我的总变量在计算后现在是
150
而不是
150.00
。变量可以是字符串、浮点或整数。回显浮点时,尾随的零将消失。只有当变量是字符串时,尾随的零才会保留。
printf(“%.02f”,$total)
给了我
150
-问题是,当我进行计算时,如果小数点后两位是
.00
,它会将其四舍五入到最接近的整数。我需要
150.00
留下来,因为Stripe需要
15000
,所以我可以使用
str_replace()
来实现这一点,使用十进制。非常棒,
str_replace('.','',number_format($total,2))
现在为Stripe提供了所需的
15000
值。非常感谢。享受编码:)