PHP整数部分填充

时间:2012-07-08 13:43:12

标签: java php floating-point numbers pad

我需要用0填充整数部分,整数部分必须至少为2个字符

str_pad( 2    ,2,"0",STR_PAD_LEFT);// 02 -> works
str_pad( 22   ,2,"0",STR_PAD_LEFT);// 22 -> works
str_pad( 222  ,2,"0",STR_PAD_LEFT);// 222-> works
str_pad( 2.   ,2,"0",STR_PAD_LEFT);// 2. -> fails -> 02. or 02
str_pad( 2.11 ,2,"0",STR_PAD_LEFT);// 2.11-> fails -> 02.11

是否有简单的代码?

如果可能,请在Java中使用

double x=2.11;
String.format("%02d%s", (int) x, String.valueOf(x-(int) x).substring(1))

不仅难看,而是印刷02.10999999999999988

编辑 for Java:Java integer part padding

5 个答案:

答案 0 :(得分:3)

不,没有简单的方法。

function padIntegerPart($n, $len) {
    $intPart = (int)$n;

    return str_repeat('0', max(0, $len - 1 - floor(log($intPart, 10)))) . $n;
}

答案 1 :(得分:3)

您还可以使用printf()函数填充整数:

像(codepad):

<?php

function pad($n) {
    $n = explode('.', (string)$n);

    if (2 === count($n)) {
        return sprintf("%02d.%d\n", $n[0], $n[1]);    
    }

    return sprintf("%02d\n", $n[0]);    
}

foreach (array(2, 22, 222, 2., 2.11) as $num) {
    echo pad($num);
}

// returns 02, 22, 222, 02, 02.11

答案 2 :(得分:1)

快速解决方案:http://codepad.org/EXcbqGos

$num = 2.11;
echo str_pad( floor($num) ,2,"0",STR_PAD_LEFT).substr($num-floor($num), 1);

它仅适用于非负数。

答案 3 :(得分:0)

如果您要查找的输出为02.11,请尝试sprintf()

sprintf("%05.2f", 02.11); // Output: 02.11
           ^ ^--- float precision
           |--- total string length

sprintf("%07.2f", 02.11); // Output: 0002.11

可能有用的链接是:

http://us2.php.net/sprintf

Extra leading zeros when printing float using printf?

答案 4 :(得分:0)

另一个:

function my_str_pad ($input ,$pad_length, $pad_string) {
    $pad_length += strlen($input) - strlen(intval($input));

    return str_pad($input, $pad_length, $pad_string, STR_PAD_LEFT);
}

以下测试:

str_pad(2., 2, "0", STR_PAD_LEFT);// 2. -> fails -> 02. or 02

失败,因为str_pad正在处理字符串,但您输入的数字带有小数但没有小数部分,因此它被视为整数。如果你想保留'。'请改用以下内容:

str_pad("2.", 2, "0" , STR_PAD_LEFT);// 2. -> works