air*_*air 42 php function rounding
我有像这样的PHP变量的价值
$var='2.500000550';
echo $var
Run Code Online (Sandbox Code Playgroud)
我想要的是删除2位数后的所有小数点.
就像现在的变量值一样
$var='2.50';
echo $var
Run Code Online (Sandbox Code Playgroud)
请记住,这个值来自mysql数据库
但是当我使用round php function我得到了圆但我不需要圆,我只需要删除2十进制简单后的所有数字.
我累了,flot()很多其他选择都没有成功.
谢谢
ran*_*ame 102
PHP本机函数bcdiv似乎正确地执行了所需要的操作.
简单地"截断"一个数字,bcdiv($var, 1, 2);其中2是要保留的小数位数(1是指数符 - 将数字除以1可以简单地将原始数字截断为所需的小数位)
事实证明这比人们想象的更难以捉摸.
在这个答案被(错误地)提升了很多之后,我注意到即使是sprintf也会回合.
我没有删除这个答案,而是将其转化为对每个提出的解决方案的更强大的解释/讨论.
number_format - 不正确.(轮次)
尝试使用数字格式:
$var = number_format($var, 2, '.', ''); // Last two parameters are optional
echo $var;
// Outputs 2.50
Run Code Online (Sandbox Code Playgroud)
如果你想要它是一个数字,那么只需输入到一个浮点数:
$var = (float)number_format($var, 2, '.', '');
Run Code Online (Sandbox Code Playgroud)
注意:正如评论中指出的那样,事实上这确实围绕着数字.
sprintf - 不正确.(sprintf也是轮次)
如果没有舍入数字很重要,那么根据下面的答案,使用sprintf:
$var = sprintf("%01.2f", $var);
Run Code Online (Sandbox Code Playgroud)
地板 - 不太好!(楼轮负数)
一些数学的地板将接近你想做的事情:
floor(2.56789 * 100) / 100; // 2.56
Run Code Online (Sandbox Code Playgroud)
其中100表示您想要的精度.如果你想要三位数,那么:
floor(2.56789 * 1000) / 1000; // 2.567
Run Code Online (Sandbox Code Playgroud)
但是,这有负数的问题.负数仍然四舍五入,而不是截断:
floor(-2.56789 * 100) / 100; // -2.57
Run Code Online (Sandbox Code Playgroud)
因此,完全可靠的解决方案需要一个功能
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;
}
Run Code Online (Sandbox Code Playgroud)
以上功能的结果:
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
Run Code Online (Sandbox Code Playgroud)
使用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
Run Code Online (Sandbox Code Playgroud)
floor(2.500000550 * 100) / 100;
Run Code Online (Sandbox Code Playgroud)
这应该做你的任务......
你正在请求一个返回"2.50"而不是返回的函数2.5,所以你不是在谈论算术而是字符串操作.那preg_replace你的朋友是:
$truncatedVar = preg_replace('/\.(\d{2}).*/', '.$1', $var);
// "2.500000050" -> "2.50", "2.509" -> "2.50", "-2.509" -> "2.50", "2.5" -> "2.5"
Run Code Online (Sandbox Code Playgroud)
如果你想用算术做,只需使用:
$truncatedVar = round($var * 100) / 100);
// "2.500000050" -> "2.5", "2.599" -> "2.59", "-2.599" -> "2.59"
Run Code Online (Sandbox Code Playgroud)
尝试使用number_format:
echo number_format('2.50000050', 2); // 2.50
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
60492 次 |
| 最近记录: |