删除两位小数点后的数字,而不舍入该值
我在php变量中有这样的价值
$var='2.500000550';echo $var
我想要的是删除2位数字后的所有小数点。
像现在变量的值将是
$var='2.50';echo $var
请记住,此值来自mysql databse
但是,当我使用round php function
四舍五入但不需要四舍五入时,我只需要删除2位小数后的所有数字即可。
我已经累了,flot()
很多其他选择都没有成功。
谢谢
回答:
TL; DR:
PHP本机函数bcdiv似乎可以正确地正确执行所需的操作。
要简单地“截断”一个数字,bcdiv($var, 1, 2);
其中2是要保留的小数位数(而1是分母-
将数字除以1可让您简单地将原始数字截断为所需的小数位)
完整答案(历史记录)
事实证明,这比人们想象的要难得多。
在这个答案被(错误地)提高了很多之后,我注意到甚至sprintf都会四舍五入。
与其删除此答案,不如将其变成对每个提出的解决方案的更详尽的解释/讨论。
尝试使用数字格式:
$var = number_format($var, 2, '.', ''); // Last two parameters are optionalecho $var;
// Outputs 2.50
如果您希望它是一个数字,则只需将其强制转换为浮点数即可:
$var = (float)number_format($var, 2, '.', '');
正如评论中指出的那样,实际上这是对数字的 舍 入。
如果不舍入数字很重要,则根据以下答案,使用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.5echo 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.5echo 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
以上是 删除两位小数点后的数字,而不舍入该值 的全部内容, 来源链接: utcz.com/qa/431890.html