PHP 编号: 只有在需要时才能看到小数点

我想知道是否存在一些函数可以自动将一个数字格式化为十进制,所以如果我有:

<?php
// $sql_result["col_number"] == 1,455.75
number_format ($sql_result["col_number"], 2, ".", "");
// will return 1455.75


// $sql_result["col_number"] == 1,455.00
number_format ($sql_result["col_number"], 2, ".", "");
// could I get 1455 instead of 1455.00?
?>

所以我的回答是,如果我的数据库中有 DECIMAL 数据格式,只有当它是圆的时候,是否存在某种方法去除小数?

还是我应该这么做?

<?php
// $sql_result["col_number"] == 1,455.00
str_replace(".00", "", (string)number_format ($sql_result["col_number"], 2, ".", ""));
// will return 1455
?>
43323 次浏览

其实我觉得你的变通方法和其他方法一样好。它简单明了,在这里讨论性能真的没有意义,所以就这样做吧。

就像埃米尔说的,你的很好。但是如果你也想从例如 7.50中移除 0,我有一个建议,rtrim():

<?php
// if $sql_result["col_number"] == 1,455.50
rtrim(rtrim(number_format($sql_result["col_number"], 2, ".", ""), '0'), '.');
// will return 1455.5
?>

事实上,我认为我能想到的最干净的方式来做这件事对于一个刚刚搜索过这类事情的人来说,就是这样做:

( number_format ($sql_result["col_number"], 2) * 100 ) / 100;

关于什么

number_format($value,2) - 0;

S 的回答帮了我一把,我不需要 number _ format 函数,所以我就这么做了

$value=$value-0;

但是在 OP 中,他需要 number _ format 来删除逗号

$value=number_format ($sql_result["col_number"], 2, ".", "")-0;

或者简单地铸造成浮子

php > echo floatval(7.00);
7
php > echo floatval(2.30);
2.3
php > echo floatval(1.25);
1.25
php > echo floatval(1.125);
1.125


php > echo (float) 7.00;
7
php > echo (float) 2.30;
2.3
php > echo (float) 1.25;
1.25
php > echo (float) 1.125;
1.125

You could also use rtrim(), which would remove excess 0s, in the case where you might want to keep one decimal place but not the excess zeros. (For example, 4.50 becomes 4.5.) Also allows you to change the number of decimal places from 2 to any other number.

rtrim(rtrim((string)number_format($value, 2, ".", ""),"0"),".");


// 4.00 -> 4
// 4.50 -> 4.5
// 4.54000000 -> 4.54 (if you're doing more decimal places)

由于找不到灵活的解决方案,我编写了一个简单的函数来获得最佳结果:

function getValueFormattedWithMinimalDecimals($value, $max_decimals = 2, $dec_point = ',', $thousands_sep = '') {
$bestNumberOfDecimals = -1;
$decimal = 0;
while ($decimal <= $max_decimals) {
$bestNumberOfDecimals = $decimal;
$valueDecimals = number_format($value, $decimal);
if (floatval($value) == $valueDecimals) {
break;
}
$decimal++;
}
if($bestNumberOfDecimals > 0 && number_format($value, $bestNumberOfDecimals) == number_format($value, 0)) {
$bestNumberOfDecimals = 0;
}


return number_format($value, $bestNumberOfDecimals, $dec_point, $thousands_sep);
}

如果你的目标是美元,我喜欢使用这种方法:

function moneyform($number, $symbol = true) {
return str_replace(".00", "", money_format(($symbol? '%.2n' : "%!n"), $number));
}


moneyform(1300999);
-->$1,300,999


moneyform(2500.99);
-->$2,500.99


moneyform(2500.99, false);
-->2,500.99

我被指控做了这样的事:

 floatval($foo) == intval($foo) ? number_format($foo) : number_format($foo,2);

我的,因为大多数数量或件不需要十进制,这个函数将只显示十进制时,需要。

str_replace(".00", "", number_format($this->pieces, 2));