This question already has answers here:
Show a number to two decimal places
(25 answers)
Closed 5 years ago.
I have a value in database which contains 20 numbers, example :
1.1234567891011223
I want to limit the echoed value to 1.123 or 1.12 only instead of this long number..
How can I do that in PHP?
It sounds like you're looking for either the round function:
$long_number = 1.1234567891011223;
$formatted_number = round($long_number, 2);
echo $formatted_number; // 1.12
Or the number_format function:
$long_number = 1.1234567891011223;
$formatted_number = number_format($long_number, 2, '.', '');
echo $formatted_number; // 1.12
Hope this helps! :)
use round function
echo round(1.1234567891011223,2); // output: 1.12
is this what you are searching for? http://php.net/manual/de/function.number-format.php
use it like that:
<?php
$a = 1.1234567891011223;
echo number_format ( $a , 3 , '.', '');
?>
Take a look at strpos and substr. Below is an example from another post #Nineoclick This function finds the decimal and rounds the number. Rounding the number will shorten it.
truncate(1.1234567891011223, 2)
function truncate($val,$p = 0)
{
$strpos = strpos($val, '.');
return $p < 0 ? round($val,$p) : ($strpos ? (float)substr($val,0,$strpos+1+$p) : $val);
}
You can also use sprintf for this
$formatted = sprintf("%01.2f", $longNum);
Or if you're just going to echo it and don't need the variable, printf
printf("%01.2f", $longNum);
Related
This question already has answers here:
Show a number to two decimal places
(25 answers)
Closed 7 years ago.
I have a variable
$amount = 621.00;
I need the 30% of the variable with output 186.30
When I calculate:
$amount2 = round($amount*30/100 , 2);
echo $amount2
gives the output of 186.3
how can I have output 186.30
number_format() should do the trick.
// english notation without thousands separator
$amount2 = number_format($amount2, 2, '.', '');
// 1234.57
You could use number_format for that:
$amount2 = number_format($amount * 30 / 100, 2);
echo $amount2;
You can use number_format
For example number_format($amount2, 2)
More details: http://php.net/manual/en/function.number-format.php
use number_format($amount2,2) at the end.
See documentation here: http://php.net/manual/en/function.number-format.php
This question already has answers here:
Delete digits after two decimal points, without rounding the value
(15 answers)
Closed 8 years ago.
I have a value 3.9609053497942. I need value 3.9 means only one value after decimal. I have used PHP number_format and round functions but it is giving me answer 4.
You could multiply the number by 10, floor() it, and then divide it back.
echo floor($value * 10) / 10;
Try with this,
echo intval((3.9609053497942*10))/10;
or
echo floor((3.9609053497942*10))/10;
There is so many possible solutions:
echo bcadd(3.9609053497942, 0, 1);
preg_match('/\d*\.\d/', 3.9609053497942, $matches);
echo $matches[0];
why not treat it as a string, like
$x = (string)3.96;
$y = explode(".",$x);
$result = $y[0] . "." . $y[1];
Did you tried like:
number_format(3.9609053497942, 1);
This question already has answers here:
Print numeric values to two decimal places
(6 answers)
Closed 11 months ago.
I have a DOUBLE data type column in my MySQL table and I have a value of:
14.5299
But PHP number_format rounds that value to:
14.5300
And if I just echo 14.5299, it outputs:
14.53
How can I output 14.5299 without hardcoding anything in my HTML markup?
Use sprintf()
echo sprintf("%2.4f", 14.5399);
Documentation: http://us2.php.net/sprintf
This worked for me:
<?php
$double = 14.5299;
echo number_format(floor($double*100)/100, 2);
?>
Result is: 14.52
$double = 14.5299;
var_dump( number_format($double, 4, '.', ',') );
... prints:
string(7) "14.5299"
... as expected.
My educated guess is that your number has actually more 9's:
$double = 14.52999;
... in this case, 14.5300 is the correct way to round.
The next function should works:
function fixedNumberFormat($float, $decimals, $withFormat = true) {
$decPoint = ($withFormat) ? "," : null;
$thousandsSep = ($withFormat) ? "," : null;
return substr(number_format($float, $decimals + 1), 0, -1);
}
fixedNumberFormat(14.5299, 4);
This question already has answers here:
Closed 10 years ago.
Possible Duplicate:
how to display number in a certain format in php
I have following digit : 3234.54554545545
I want to split it like 3234.54, means I want to display only 2 char after dot.
Following is something I am trying but its not working
<?php
$v = "3234.54554545";
$pos = strpos($v, '.');
$r = substr($v, count($pos) - 3);
echo $v."".$r;
?>
Actual result: 3234.54554545545
Desired output : 3234.54
Please help me. Thanks
You can use number_format function as:
$v = "3234.54554545";
$r = number_format($v, 2, '.', '');
Why can't you use number_format?
<?php
$v = "3234.54554545";
$r = number_format($v, 2);
?>
PHP is super-flexible with it's types, and numeric strings can be used directly as numbers.
//This is true
('123.45' == 123.45)
As such you can use number_format to format the string. You can also use sprintf if you need more control.
This question already has answers here:
Show a number to two decimal places
(25 answers)
Closed 11 months ago.
I need to convert numbers to have .00 after them, but only if the number is an integer, or it has just 1 number after the decimal point, like so:
1.4 = 1.40
45 = 45.00
34.77 = 34.77
What reg exp to use for this simple case?
You can also use printf or sprintf
printf("%01.2f", '34.77');
$formatted_num = sprintf("%01.2f", '34.77');
number_format($number, 2, '.', '');
Read more at PHP.net. You don't need to determine if a number is an integer or not -- as long as it's a number, it will be formatted to two decimal places.
If you'd like the thousands separator, change the last parameter to ','.
Check out PHP's built-in function number_format
You can pass it a variable and it'll format it to the correct decimal places
$number = 20;
if (is_int($number)) {
$number = number_format($number, 2, '.', '');
}
read number_format
number_format($number, 2, '.', '');
$num = 0.00638835;
$avg = sscanf($num,"%f")[0] /100;
echo sprintf("%.10f", $avg);
result 0.0000638835