PHP number: decimal point visible only if needed

PhpStringAutomationInteger

Php Problem Overview


I'd like to know if exists some function to automatically format a number by it's decimal, so if I have:

<?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?
?>

so my answer is if does exist some way to remove the decimals if I have DECIMAL data forma in my DB only when it's round?

Or shoud I do something like that?

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

Php Solutions


Solution 1 - Php

floatval or simply casting to float

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

Solution 2 - Php

I actually think that your workaround is as good as any. It's simple and clear, and there's really no point talking about performance here, so just go for it.

Solution 3 - Php

As Emil says yours are good. But if you want to remove 0 from e.g. 7.50 too, I've got a suggestion, rtrim():

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

Solution 4 - Php

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)

Solution 5 - Php

Actually I think the cleanest way I can think of to do this for someone that just did a search looking for this sort of thing is to do this:

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

Solution 6 - Php

I've been accused of doing something like this:

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

Solution 7 - Php

Mine since most quantity or pieces do not require decimal, this function will only show decimal when needed.

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

Solution 8 - Php

If you are targeting US currency I like to use this method:

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

Solution 9 - Php

Warren.S answer helped me out. I didn't need the number_format function, so I just did this

$value=$value-0;

But in the OP's case, he needs number_format to remove the commas. So this would work for him

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

Solution 10 - Php

Since I could not find a flexible solution I wrote a simple function to get the best result:

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);
}

Solution 11 - Php

What about

number_format($value,2) - 0;

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionvittoView Question on Stackoverflow
Solution 1 - PhpxDiffView Answer on Stackoverflow
Solution 2 - PhpEmil HView Answer on Stackoverflow
Solution 3 - PhpHalil ÖzgürView Answer on Stackoverflow
Solution 4 - PhpDan LeveilleView Answer on Stackoverflow
Solution 5 - PhpTomasView Answer on Stackoverflow
Solution 6 - PhpDanialView Answer on Stackoverflow
Solution 7 - PhpFelix LabayenView Answer on Stackoverflow
Solution 8 - PhpKevin JView Answer on Stackoverflow
Solution 9 - PhpSakusheeView Answer on Stackoverflow
Solution 10 - PhpThomasKView Answer on Stackoverflow
Solution 11 - PhpWarren.SView Answer on Stackoverflow