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\

将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\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
的四舍五入值返回到指定的
精度(小数点后的位数)<代码>精度
也可以为负或零(默认值)

示例#1
round()
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);

您可以使用PHP
printf
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.Vicario
round
并不能解决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"}