【问题标题】:Remove useless zero digits from decimals and remove decimals above 2 in PHP从小数中删除无用的零位并在 ​​PHP 中删除 2 以上的小数
【发布时间】:2021-01-22 08:05:13
【问题描述】:

我正在尝试找到一种快速方法,首先将我的数字设为 2 位小数,然后从结果值中删除零位小数,如下所示:

echo function(0.00);
// 0

echo function(125.70);
// 125.7

echo function(245.051);
// 245.05

echo function(2245.0090);
// 2245.01

我尝试了数字格式,但是当我用 0 调用它时,它的行为如下:

echo number_format(0,2)
// 0.00

但我想要 0

是否存在一些优化的方法来做到这一点?

【问题讨论】:

标签: php


【解决方案1】:

可能有更好的方法来实现这一点,但首先想到的方法是使用rtrim() 和.0 作为修剪将其修剪掉。但是,当您遇到0.00 之类的情况(并且只返回一个空字符串)时,这也会完全消除,因此我们可以对此进行显式检查。

function myFormat($number, $precision = 2) {
    $number = rtrim(round($number, $precision), '.0');
    if (empty($number)) {
        $number = 0;
    }
    return $number;
}

echo myFormat(0.00); // 0
echo myFormat(0.01); // 0.01
echo myFormat(0.10); // 0.1
echo myFormat(1.00); // 1
echo myFormat(2245.0090); // 2245.01

【讨论】:

  • echo myFormat(2245.0090); // 2245.0090 但我想要 2245.01 如果它超过 2 位小数,正如我所显示的那样
  • 你能不能先round()它,然后按照@Qirel的建议做?
  • 如果您还想对其进行舍入,则只需应用精度为 2 的 round() 函数。您可以在函数的第一行中执行此操作。查看修改后的答案。
  • round($number, 2); 已经为这里提到的所有测试用例提供了完全相同的结果。
  • round(0.0, 2)、@04FS 除外。这将导致 0.0,而 OP 想要 0,当小数为 0 时没有任何小数点。
【解决方案2】:

你可以试试这个。

<?php 
echo (float)number_format(0,2);

【讨论】:

    猜你喜欢
    • 2013-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 2021-06-20
    • 1970-01-01
    相关资源
    最近更新 更多