能否将*=运算符与round()函数配合使用?是否存在快捷写法?
实现带四舍五入的复合赋值快捷写法
哈哈,这个痛点我太懂了!每次想偷懒用复合赋值却还要套个round(),确实有点烦。给你几个实用的解决方案:
自定义引用传递函数(最接近
*=的直观体验)
我们可以写一个直接修改原变量的函数,利用PHP的引用传递特性,这样调用时不用重复写赋值语句,和*=的使用逻辑几乎一致:function roundMul(&$number, $multiplier) { $number = round($number * $multiplier); }使用示例:
$var = 10; roundMul($var, 1.5); // 执行后$var的值为15 $var = 11; roundMul($var, 1.5); // 执行后$var的值为17(11*1.5=16.5,round后取17)这个方法的优势是调用起来超简洁,完全不用写
$var = ...,直接操作原变量就行。利用赋值运算符的返回值(紧凑写法)
如果你不想额外定义函数,也可以把*=直接嵌套进round()里——因为PHP的赋值运算符会返回运算后的结果,所以可以写成:$var = round($var *= 1.5);虽然还是要写
$var =,但相比分开写$var *= 1.5; $var = round($var);,这种写法更贴近复合赋值的语法感,逻辑上也连贯,算是折中后的快捷写法。进阶:自定义运算符(适合高频场景)
要是你的项目用的是PHP 8.1+,还可以借助第三方解析库(比如nikic/php-parser)实现自定义运算符(比如*=~这类)来直接完成“乘法+四舍五入”操作,但这个方案比较重,适合大型项目或者真的频繁用到这个逻辑的场景,普通情况前面两个方法完全够用啦。
内容的提问来源于stack exchange,提问作者Zorann
相关产品推荐
相关产品推荐

