Php 显示小数点后两位的数字
将PHP字符串四舍五入到小数点后两位的正确方法是什么Php 显示小数点后两位的数字,php,formatting,numbers,rounding,number-formatting,Php,Formatting,Numbers,Rounding,Number Formatting,将PHP字符串四舍五入到小数点后两位的正确方法是什么 $number = "520"; // It's a string from a database $formatted_number = round_to_2dp($number); echo $formatted_number; 输出应为520.00 函数定义的取整应该是怎样的? e、 g 使用PHP函数。round_to_2dp是一个用户定义的函数,除非发布该函数的声明,否则无法执行任何操作 然而,我的猜测是这样的:number\
$number = "520"; // It's a string from a database
$formatted_number = round_to_2dp($number);
echo $formatted_number;
输出应为520.00
函数定义的取整应该是怎样的?
e、 g
使用PHP函数。round_to_2dp
是一个用户定义的函数,除非发布该函数的声明,否则无法执行任何操作
然而,我的猜测是这样的:number\u格式($number,2)代码>您可以使用:
例如:
$foo = "105";
echo number_format((float)$foo, 2, '.', ''); // Outputs -> 105.00
此函数返回一个字符串或者
$padded = sprintf('%0.2f', $unpadded); // 520 -> 520.00
使用(如果您只需要浮点格式的数字,请使用,否则请使用number_format()作为):
从手册中:
说明:
将val
的四舍五入值返回到指定的精度(小数点后的位数)<代码>精度
也可以为负或零(默认值)
示例#1round()
examples
示例#2个模式示例
尝试:
输出将是:
1,234,545,454.00
7,234,545,423.00
我自己做
$decimals = 2;
$number = 221.12345;
$number = $number * pow(10, $decimals);
$number = intval($number);
$number = $number / pow(10, $decimals);
您可以使用PHPprintf
或sprintf
函数:
sprintf
示例:
$num = 2.12;
echo sprintf("%.3f", $num);
echo printf("%.2f", $num);
您也可以在不使用echo的情况下运行相同的程序。示例:sprintf(“%.3f”,$num)代码>
输出:
2.120
2.124
或者,使用printf
:
$num = 2.12;
echo sprintf("%.3f", $num);
echo printf("%.2f", $num);
输出:
2.120
2.124
无圆数
$double = '21.188624';
echo intval($double) . '.' . substr(end(explode('.', $double)), 0, 2);
它将返回5.98而不舍入数字
$number = sprintf('%0.2f', $numbers); // 520.89898989 -> 520.89
这将在小数点后给出2个数字
$twoDecNum = sprintf('%0.2f', round($number, 2));
四舍五入可以正确地对数字进行四舍五入,如果四舍五入后数字恰好只有一位小数,sprintf将其强制为两位小数
bcdiv($number, 1, 2) // 2 varies for digits after the decimal point
这将在小数点后正好显示两位数字
优势:
如果您只想在浮点值后显示两位数字,而不想在int后显示两位数字,请使用此选项。这里,我使用函数在
(点)后得到两位小数
function truncate_number($number, $precision = 2) {
// Zero causes issues, and no need to truncate
if (0 == (int)$number) {
return $number;
}
// Are we negative?
$negative = $number / abs($number);
// Cast the number to a positive to solve rounding
$number = abs($number);
// Calculate precision number for dividing / multiplying
$precision = pow(10, $precision);
// Run the math, re-applying the negative value to ensure
// returns correctly negative / positive
return floor( $number * $precision ) / $precision * $negative;
}
上述功能的结果:
echo truncate_number(2.56789, 1); // 2.5
echo truncate_number(2.56789); // 2.56
echo truncate_number(2.56789, 3); // 2.567
echo truncate_number(-2.56789, 1); // -2.5
echo truncate_number(-2.56789); // -2.56
echo truncate_number(-2.56789, 3); // -2.567
新的正确答案
使用PHP本机函数
解决此问题的另一种更奇特的方法是为0
的$right\u操作数使用伪值
$formatted_number = bcadd($number, 0, 2);
如果要在整个项目中使用两位小数,可以定义:
bcscale(2);
然后,以下功能将产生您想要的结果:
$myvalue = 10.165445;
echo bcadd(0, $myvalue);
// result=10.11
但是,如果不使用bcscale函数,则需要按如下方式编写代码以获得所需的结果
$myvalue = 10.165445;
echo bcadd(0, $myvalue, 2);
// result=10.11
了解更多
使用PHP函数
比如说,
$num = 7234545423;
echo number_format($num, 2);
输出将是:
1,234,545,454.00
7,234,545,423.00
用于条件舍入,即显示真正需要的小数点,否则显示整数
123.56=>12.56
123.00=>123
$somenumber = 123.56;
$somenumber = round($somenumber,2);
if($somenumber == intval($somenumber))
{
$somenumber = intval($somenumber);
}
echo $somenumber; // 123.56
$somenumber = 123.00;
$somenumber = round($somenumber,2);
if($somenumber == intval($somenumber))
{
$somenumber = intval($somenumber);
}
echo $somenumber; // 123
下面是另一个包含和的解决方案:
添加到其他答案中,因为默认情况下,number_format()将添加数千分隔符
要删除此项,请执行以下操作:
$number = number_format($number, 2, ".", "");
- 选择小数位数
- 格式逗号(,)
- 修剪尾随零的选项
一劳永逸
例子
echo format_number(1234.5,2,true); //returns 1,234.5
echo format_number(1234.5,2); //returns 1,234.50
echo format_number(1234.5); //returns 1,235
如果你像我一样使用数学方程,你可以这样设置:
{math equation="x + y" x=4.4444 y=5.0000 format="%.2f"}
这就是我今天遇到的同一个问题,我想对一个数字进行四舍五入,并将浮点值返回到给定的小数位,并且它不能是字符串(从number_格式返回)
答案是
echo sprintf('%.$decimalPlaces.'f',round($number,$decimalPlaces))代码>Round可以实现Rich想要的功能,但是number\u format()对于所有类型的数字格式来说都更有趣。这种方法也可以执行舍入操作,而不仅仅是在末尾强制使用数字“.00”。我尝试了舍入,但它不起作用-它不会添加额外的.00。Round(520,2)返回520,不是@richipdate for PHP 7.4+所要求的520.00,因为这个答案非常古老。因为round返回一个浮点,所以只能保证返回一个最多有一个小数点的数字(即,它返回的不是整数的东西,小数点的最小数量可能代表该数字)。所以round(1,2)
(或任何级别或精度)返回“1.0”,因为“1.00”不是有效的浮点。要使数字的行为类似于字符串,需要使用字符串操纵函数。(PHP以前的版本可能有不同的行为/逻辑性较差)从你的第一段开始,我认为你误解了这个问题<代码>四舍五入到二分之一($number)
表示为伪代码;OP要求有人告诉他用什么来代替这个表达式。很高兴看到一些数学需要这样做。虽然我更喜欢使用内置函数。重新发明轮子是没有意义的。对不起,但是round(),正如它所说的,round de number,有时,我不想round。round()会更好,因为它的可读性和简单性,但是对于任何重要的东西,请注意它一直被认为是bug@alvarog.Vicarioround
并不能解决OP的问题round(“520”,2)
返回浮点值520
,并且回音当然不会显示到小数点后2位。出于OP的目的(通过用尾随零填充将整数显示到小数点后2位),您需要一个数字格式函数,而不是舍入函数。所有其他答案都限于带点表示法的十进制值。当你需要得到520,00
而不是520.00
时,这很简单。如果你只想限制浮点而不是int,那么bcdiv($number,1,2)我认为你应该使用bcadd(0,$yournumber,2)它会给你完美的结果。那么如果你想要520,00
?我想另一个答案在这种情况下效果更好。^不,另一个答案不会给出小数点后两位,因为其他原因,您可能需要这是您不需要四舍五入。。。或者,在我的原因中,返回的SQL浮点与我使用的普通浮点不一样
$num = 520.00
strtok(round($num, 2), '.') . '.' . str_pad(strtok('.'), 2, '0')
$number = number_format($number, 2, ".", "");
function format_number($number,$dec=0,$trim=false){
if($trim){
$parts = explode(".",(round($number,$dec) * 1));
$dec = isset($parts[1]) ? strlen($parts[1]) : 0;
}
$formatted = number_format($number,$dec);
return $formatted;
}
echo format_number(1234.5,2,true); //returns 1,234.5
echo format_number(1234.5,2); //returns 1,234.50
echo format_number(1234.5); //returns 1,235
{math equation="x + y" x=4.4444 y=5.0000 format="%.2f"}