gpt4 book ai didi

php - 删除小数点后两位,不四舍五入

转载 作者:IT王子 更新时间:2023-10-29 00:53:58 25 4
gpt4 key购买 nike

我在 php 变量中有这样的值

$var='2.500000550';
echo $var

我想要的是删除 2 位数字后的所有小数点。

现在变量的值将是

$var='2.50';
echo $var

keep in mind this value is coming from mysql databse

但是当我使用 round php 函数时,我得到了舍入但我不需要舍入,我只需要简单地删除 2 位小数后的所有数字。

我累了,flot() 和很多其他选项都没有成功。

谢谢

最佳答案

长话短说:

PHP 原生函数 bcdiv似乎完全按照要求正确地做了。

要简单地“截断”一个数字,bcdiv($var, 1, 2); 其中 2 是要保留的小数位数(1 是分母 - 将数字除以 1 允许您只需将原始数字截断到所需的小数位)

完整答案(历史)

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

在这个答案被(错误地)投票了相当多之后,我注意到即使是 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

“旧”正确答案:利用 floor 的函数

因此,一个完全健壮的解决方案需要一个函数:

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

关于php - 删除小数点后两位,不四舍五入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9944001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com