php如何去掉两位小数,php – 删除两位小数后的数字,而不对该值进行舍入

TL; DR:

PHP本机功能bcdiv似乎正好做了所需要的,正确的。

为了简单地“截断”一个数字,bcdiv(​​$ var,1,2);其中2是要保留的小数位数(1是denomenator – 将数字除以1可以简单地将原始数字截断到所需的小数位)

完整答案(历史)

事实证明比人们想象的更加难以捉摸。

这个答案是(不正确地)upvoted了一点,我已经注意到,即使sprintf将圆。

而不是删除这个答案,我把它变成一个更强大的解释/每个提出的解决方案的讨论。

number_format – 不正确。 (发)

尝试使用number format:

$var = number_format($var, 2, '.', ''); // Last two parameters are optional

echo $var;

// Outputs 2.50

如果您希望它是一个数字,那么只需将其转换为float:

$var = (float)number_format($var, 2, '.', '');

注意:正如评论中已经指出的,这其实是圆数。

sprintf – 不正确(sprintf也回合)

如果不是四舍五入的数字是重要的,那么根据下面的答案,使用sprintf:

$var = sprintf("%01.2f", $var);

地板 – 不是很好! (底数负数)

floor,有一些数学,会接近做你想要的:

floor(2.56789 * 100) / 100; // 2.56

100表示​​你想要的精度。如果你想要三位数,那么:

floor(2.56789 * 1000) / 1000; // 2.567

但是,这是负数的问题。负数仍然是四舍五入,而不是截断:

floor(-2.56789 * 100) / 100; // -2.57

“老”正确答案:功能利用地板

所以一个完全强大的解决方案需要一个功能:

function truncate_number( $number, $precision = 2) {

// Zero causes issues, and no need to truncate

if ( 0 == (int)$number ) {

return $number;

}

// Are we negative?

$negative = $number / abs($number);

// Cast the number to a positive to solve rounding

$number = abs($number);

// Calculate precision number for dividing / multiplying

$precision = pow(10, $precision);

// Run the math, re-applying the negative value to ensure returns correctly negative / positive

return floor( $number * $precision ) / $precision * $negative;

}

上述功能的结果:

echo truncate_number(2.56789, 1); // 2.5

echo truncate_number(2.56789); // 2.56

echo truncate_number(2.56789, 3); // 2.567

echo truncate_number(-2.56789, 1); // -2.5

echo truncate_number(-2.56789); // -2.56

echo truncate_number(-2.56789, 3); // -2.567

新正确答案

使用PHP本机功能bcdiv

echo bcdiv(2.56789, 1, 1); // 2.5

echo bcdiv(2.56789, 1, 2); // 2.56

echo bcdiv(2.56789, 1, 3); // 2.567

echo bcdiv(-2.56789, 1, 1); // -2.5

echo bcdiv(-2.56789, 1, 2); // -2.56

echo bcdiv(-2.56789, 1, 3); // -2.567

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值