Laravel中如何显示0.001这类小数数值?
解决Laravel视图中小数数值无法正常显示的问题
我来帮你拆解这个问题,找到核心原因和可行的解决方案:
问题核心分析
首先得明确你遇到的矛盾点:
- 单条记录的
$member->amount用number_format()无论是在标签内容还是data-end属性里都能正常工作 - 但通过
sum('amount')计算出来的$total_deposit,在标签内容里格式化显示没问题,放到data-end里却失效了 - 你提到的
{{ $total_deposit,3 }}是Blade语法错误,这种写法会直接抛出异常,绝对不是正确的用法
为啥会有这个差异?因为number_format()会把数值转成字符串类型(比如0.001会变成"0.001",如果有千分位分隔符就是"0,001"),而你用的数字滚动动画插件只认纯数字(浮点/整数)类型的data-end值,根本处理不了带格式的字符串。
正确解决方案
我们需要分开处理:给插件传原始数值,给用户看格式化后的内容,具体代码如下:
视图层正确代码
<div class="num" data-start="0" data-end="{{ $total_deposit }}" data-postfix="{{ $basic->symbol }}" data-duration="1500" data-delay="0"> {{ number_format($total_deposit, 3) }} </div>
data-end直接用原始的$total_deposit数值,保证插件能识别并执行滚动动画- 标签内容里用
number_format()格式化,确保页面展示的小数格式符合需求
额外优化:避免浮点精度问题
如果sum()计算时出现浮点精度丢失(比如多个小数相加后结果不对),可以在控制器里用DB::raw()强制保留小数位:
// 控制器中修改total_deposit的赋值代码 $data['total_deposit'] = Deposit::whereUser_id(Auth::user()->id) ->sum(DB::raw('CAST(amount AS DECIMAL(10,3))'));
这样数据库层面就会按3位小数来计算总和,避免PHP浮点运算带来的精度误差。
为啥之前的写法失效?
你之前写的data-end="{{number_format( $total_deposit,3) }}"会把数值转成字符串,比如0.001变成"0.001",很多数字滚动插件会把这个字符串当成无效值(或者直接识别为0),所以动画就不工作了。直接传递原始的浮点数值,插件就能正确识别并执行滚动效果。
验证步骤
- 先在控制器里加
dd($total_deposit),确认计算出来的总和是正确的小数数值 - 打开浏览器开发者工具,查看元素的
data-end属性值是纯数字(比如0.001)而不是带引号的字符串 - 测试小数数值的滚动动画是否正常执行
内容的提问来源于stack exchange,提问作者Waqar Ali
相关产品推荐
相关产品推荐

