我试图找出一种产生以下输出的方法:
4.0000 = 4.00
4.5000 = 4.50
4.454= 4.454
4.54545454 = 4.5455
4.450 = 4.45基本上,我想确保始终有至少2小数位,如果有额外的零,修剪到小数点2位。如果小数超过4位,四舍五入,保持在4位。
我可以用:
number_format($number, 4, '.', '');然后重新修剪以移除零,但在许多情况下,这将使我的小数位数少于2位。
发布于 2013-11-25 20:38:27
function format_number($number) {
$str = number_format($number, 4, '.', '');
return preg_replace('/(?<=\d{2})0+$/', '', $str);
}
format_number(4.0) // "4.00"
format_number(4.5) // "4.50"
format_number(4.454) // "4.454"
format_number(4.54545454) // "4.5455"
format_number(4.450) // "4.45"发布于 2013-11-25 20:25:40
这里有一个你可以做到的方法:
function myround($input) {
$floor = floor($input);
$remain = rtrim($input- $floor);
if(strlen($remain) > 4) {
return number_format($floor + $remain,4);
} else {
return number_format($floor + $remain,2);
}
}
print_r(myround(4.312423)); //outputs 4.3124
print_r(myround(4.3)); //outputs 4.30
print_r(myround(4)); //outputs 4.00发布于 2013-11-25 20:30:17
如果您想避免REGEX,我会这样做的:
$arr = array();
$arr = 4.0000;
$arr = 4.5000;
$arr = 4.454;
$arr = 4.54545454;
$arr = 4.450;
foreach($arr as $k=>$v)
{
$arr[$k] = number_format($v, 4, '.', '');
$vals = exlode('.', (string)$arr[$k]);
if(substr($vals[1], -1, 1) === '0')
{
$arr[$k] = (float)$vals[0].'.'.substr($vals[1], -1, 1);
$vals = exlode('.', (string)$arr[$k]);
if(substr($vals[1], -1, 1) === '0')
{
$arr[$k] = (float)$vals[0].'.'.substr($vals[1], -1, 1);
}
}
}https://stackoverflow.com/questions/20202472
复制相似问题