我有问题以这种方式格式化数字:
Original number: 8.400
Needed number: 8.40
I can use: number_format(floatval($number), 2)
Original number: 1.500
Needed number: 1.50
I can use again: number_format(floatval($number), 2)
Original number: 3.546
Needed number: 3.546
I can use again: Here i dont know what should i use. I need that 3rd decimal
Original number: 10
Needed number: 10.00
I can use again: number_format(floatval($number), 2)
因此,如果数字包含第3个小数位,第3个是0
,那么我需要它进行修剪(可以使用例如floatval
),但如果第3个小数位不是0,那么我应该离开那个数字完好无损。
答案 0 :(得分:0)
根据您的规范(即8.450001 => 8.45
),以下代码适合您:
// Returns the nth digit of a float
function get_digit($number, $n) {
return ($number * pow(10, $n)) % 10;
}
$number = floatval($number);
$number_third_digit = get_digit($number, 3);
if($number_third_digit == 0) {
echo number_format($number, 2);
}
else {
echo number_format($number, 3);
}
可以测试代码here。
<强>结果
8.500 => 8.50
8.546 => 8.546
8.450001 => 8.45
10 => 10.00
答案 1 :(得分:0)
检查出来:
$number = 8.40;
$newNumber = ($number == $newnumber=sprintf('%03.2f', $number)) ? $newnumber:$number;
如果sprintf构建的“格式化版本”的浮点值与原始值不同,请保留原始值。否则,请使用格式化版本。
答案 2 :(得分:0)
试试这段代码:
$num = 8.40;
if (strpos($num,'.')>-1) {
list($int,$dec)=explode('.', $num);
} else {
$dec = '';
}
if ((strlen($dec)>2 AND $dec[2]==0) OR strlen($dec)<=2) {
echo number_format(floatval($num),2);
} else {
echo floatval($num);
}