首页 文章

显示2位小数的数字

提问于
浏览
428

将PHP字符串舍入到2位小数的正确方法是什么?

$number = "520"; // It's a string from a DB

$formatted_number = round_to_2dp($number);

echo $formatted_number;

输出应为 520.00 ;

round_to_2dp() 函数定义应该如何?

20 回答

  • 8

    解决此问题的另一种更奇特的方法是使用bcadd(),为 0 的$ right_operand使用虚拟值 .

    $formatted_number = bcadd($number, 0, 2);
    
  • 1

    round_to_2dp 是用户定义的函数,除非您发布了该函数的声明,否则无法执行任何操作

    但是,我的猜测是这样做 number_format($number,2);

  • 20

    使用PHP number_format()函数 . 例如

    $num = 7234545423; 
    echo number_format($num, 2);
    

    输出将是:

    7,234,545,423.00

  • -3

    我自己做 .

    $decimals = 2;
    $number = 221.12345;
    $number = $number * pow(10,$decimals);
    $number = intval($number);
    $number = $number / pow(10,$decimals);
    
  • 4
    bcdiv($number, 1, 2) //2 varies for digits after decimal
    

    这将在十进制后正好显示两位数 .

    Advantage: 如果要仅在浮点值后显示两位数而不是int,则使用此值 .

  • 144

    你可以使用number_format()

    return number_format((float)$number, 2, '.', '');
    

    例:

    $foo = "105";
    echo number_format((float)$foo, 2, '.', '');  // Outputs -> 105.00
    

    此函数返回 string .

  • 21

    或者,

    $padded = sprintf('%0.2f', $unpadded); // 520 -> 520.00
    
  • 168

    使用round()(如果您只期望float格式的数字,请使用,否则使用number_format()作为answer given by Codemwnci):

    echo round(520.34345,2);    // 520.34
    
    echo round(520, 2);         // 520
    

    从手册:

    描述:float round(float $ val [,int $ precision = 0 [,int $ mode = PHP_ROUND_HALF_UP]]);
    将val的舍入值返回到指定的精度(小数点后的位数) . 精度也可以是负数或零(默认值) .

    ...

    示例#1 round()示例<?php
    回声(3.4); // 3
    回声(3.5); // 4
    echo round(3.6); // 4
    echo round(3.6,0); // 4
    echo round(1.95583,2); // 1.96
    echo round(1241757,-3); // 1242000
    echo round(5.045,2); // 5.05
    echo round(5.055,2); // 5.06
    ?>
    示例#2模式示例<?php
    echo round(9.5,0,PHP_ROUND_HALF_UP); // 10
    echo round(9.5,0,PHP_ROUND_HALF_DOWN); // 9
    echo round(9.5,0,PHP_ROUND_HALF_EVEN); // 10
    echo round(9.5,0,PHP_ROUND_HALF_ODD); // 9

    echo round(8.5,0,PHP_ROUND_HALF_UP); // 9
    echo round(8.5,0,PHP_ROUND_HALF_DOWN); // 8
    echo round(8.5,0,PHP_ROUND_HALF_EVEN); // 8
    echo round(8.5,0,PHP_ROUND_HALF_ODD); // 9
    ?>

  • 4

    尝试:

    $number = 1234545454; 
    echo  $english_format_number = number_format($number, 2);
    

    输出将是:

    1,234,545,454.00
    
  • 5

    http://php.net/manual/en/function.round.php

    例如

    echo round(5.045, 2);    // 5.05
    
    echo round(5.055, 2);    // 5.06
    
  • 2

    你可以使用php printfsprintf 函数:

    sprintf 示例:

    $num = 2.12;
    echo sprintf("%.3f",$num);
    

    您也可以在没有 echo 的情况下运行, ex: sprintf("%.3f",$num);

    输出:

    2.120
    

    或者,使用 printf

    echo printf("%.2f",$num);
    

    输出:

    2.124
    
  • 3

    使用PHP number_format()函数 .

  • 8

    对于条件舍入,即 . 显示小数,它确实需要,否则整数

    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
    
  • 9
    $number = sprintf('%0.2f', $numbers); // 520.89898989 -> 520.89
    

    这将在小数点后给你2个数字 .

  • 854
    $retailPrice = 5.989;
    echo number_format(floor($retailPrice*100)/100,2, '.', '');
    

    如果没有舍入数字,它将返回5.98 .

  • 6

    如果要在整个项目中使用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
    

    了解更多

  • 5
    $twoDecNum = sprintf('%0.2f', round($number, 2));
    

    舍入正确地舍入数字,并且sprintf将其强制为2位小数,如果它在舍入后恰好只有1位小数 .

  • 5

    没有圆的数字

    $double = '21.188624';
    echo intval($double).'.'.substr(end(explode('.',$double)),0,2);
    
  • 1

    在这里我得到2位小数 . (点)使用函数..

    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
    

    New Correct Answer

    使用PHP本机函数bcdiv

    echo bcdiv(2.56789, 1, 1);  // 2.5
    echo bcdiv(2.56789, 1, 2);  // 2.56
    echo bcdiv(2.56789, 1, 3);  // 2.567
    echo bcdiv(-2.56789, 1, 1); // -2.5
    echo bcdiv(-2.56789, 1, 2); // -2.56
    echo bcdiv(-2.56789, 1, 3); // -2.567
    
  • 6

    您可以使用PHP round()函数 .

    echo round(3.4);         // 3
    echo round(3.5);         // 4
    echo round(3.6);         // 4
    echo round(3.6, 0);      // 4
    echo round(1.95583, 2);  // 1.96
    echo round(1241757, -3); // 1242000
    echo round(5.045, 2);    // 5.05
    echo round(5.055, 2);    // 5.06
    

相关问题