我正在尝试在PHP Laravel项目中做2位数的精度,但它不起作用。我有1234666.6666667
的值1234666.66
但我在此处或/和其他搜索页中看到的所有结果。
这是我的代码:
$value = 1234666.6666667;
return round($value,2);
任何其他解决方案?
答案 0 :(得分:4)
修改强>
正如我所看到的,你实际上想要将楼层数设置为2个小数点,而不是围绕它,所以this answer可以帮助你:
$value = 1234666.6666667;
floor($value * 100) / 100; // returns 1234666.66
如果你需要3个小数点,你需要加倍并除以1000,换算4 - 用10000等等。
您可以使用 number_format
,它会将值转换为字符串,因此您将失去实际浮动值:
$value = 1234666.6666667;
echo number_format($value, 2, '.', ''); // prints 1234666.67
击> <击> 撞击>
答案 1 :(得分:1)
使用此功能。
function truncate($i) {
return floor($i*100) / 100.0;
}
然后你可以做
$value = truncate(123.5666666); // 123.56
答案 2 :(得分:0)
务实的方法是使用round($value - 0.05, 2)
,但即便如此,也会让你陷入热水之中。浮点数不好。这是我害怕的生活。最接近的double
到1234666.66是
1234666.65999999991618096828460693359375
应用我的公式后,这就是$value
!真的,如果你想要精确的小数精度,那么你需要使用十进制类型。否则使用整数类型,并以100的倍数工作。
对于前一个选择,请参阅http://de2.php.net/manual/en/ref.bc.php
答案 3 :(得分:0)
$value = bcadd($value, 0, 2); // 1234666.6666667 -> 1234666.66
解决此问题的另一种更奇特的方法是使用bcadd()为$ right_operand为0的虚拟值, 这将在小数点后给你2个数字。