PHP删除小数而不会四舍五入

new*_*bie 26 php decimal rounding

我想在没有四舍五入的情况下删除小数.例如,如果我有1.505,我想删除最后一个小数,值应该是1.50.PHP中有这样的功能吗?

Ren*_*Pot 37

你需要这样的floor():

$rounded = floor($float*100)/100;
Run Code Online (Sandbox Code Playgroud)

或者你转换为整数:

$rounded = 0.01 * (int)($float*100);
Run Code Online (Sandbox Code Playgroud)

这样它就不会四舍五入.


Isi*_*ode 11

$float = 1.505;

echo sprintf("%.2f", $float);

//outputs 1.50
Run Code Online (Sandbox Code Playgroud)

  • 重要的是要注意,如果它认为需要,"sprintf"将ROUND浮动.例如,取分区"31/53 = 0.584905 [...]` - 如果我们想要3个小数位,我们可以做`sprintf("%.3f",(31/53))`但这不给我们0.584.它给了我们0.585. (9认同)
  • sprintf舍入值... sprintf('%.2f','1.239')=> 1.24 (3认同)
  • 这不是答案。sprintf会舍入该值。 (2认同)

gor*_*rds 11

要对 +ve-ve 数字准确地执行此操作,您需要使用:
- floor()+ve 数字
的 phpceil()函数- -ve 数字的 php函数

function truncate_float($number, $decimals) {
    $power = pow(10, $decimals); 
    if($number > 0){
        return floor($number * $power) / $power; 
    } else {
        return ceil($number * $power) / $power; 
    }
}
Run Code Online (Sandbox Code Playgroud)

这样做的原因是floor()总是将数字向下舍入,而不是向零舍入。
floor()有效地将 -ve 数字向更大的绝对值四舍五入,
例如floor(1.5) = 1whilefloor(-1.5) = -2

因此,对于multiply by power, remove decimals, divide by power截断方法:
-floor()仅适用于正数
-ceil()仅适用于负数

要对此进行测试,请将以下代码复制到http://phpfiddle.org/lite(或类似)的编辑器中:

<div>Php Truncate Function</div>
<br>
<?php
    function truncate_float($number, $places) {
        $power = pow(10, $places); 
        if($number > 0){
            return floor($number * $power) / $power; 
        } else {
            return ceil($number * $power) / $power; 
        }
    }

    // demo
    $lat = 52.4884;
    $lng = -1.88651;
    $lat_tr = truncate_float($lat, 3);
    $lng_tr = truncate_float($lng, 3);
    echo 'lat = ' . $lat . '<br>';
    echo 'lat truncated = ' . $lat_tr . '<br>';
    echo 'lat = ' . $lng . '<br>';
    echo 'lat truncated = ' . $lng_tr . '<br><br>';

    // demo of floor() on negatives
    echo 'floor (1.5) = ' . floor(1.5) . '<br>';
    echo 'floor (-1.5) = ' . floor(-1.5) . '<br>';
?>
Run Code Online (Sandbox Code Playgroud)


小智 9

使用 PHP 原生函数bcdiv

echo bcdiv(2.56789, 1, 2);  // 2.56
Run Code Online (Sandbox Code Playgroud)

  • 完美的。用它来获取 2 位数字并应用 number_format 与 2 来正确显示我的价格。谢谢 (2认同)