2位精度PHP

时间:2017-10-02 08:52:07

标签: php

我正在尝试在PHP Laravel项目中做2位数的精度,但它不起作用。我有1234666.6666667的值1234666.66但我在此处或/和其他搜索页中看到的所有结果。 这是我的代码:

$value = 1234666.6666667;
return round($value,2);

任何其他解决方案?

4 个答案:

答案 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个数字。