4

整数部分を 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を出力します

Java の編集: Java 整数部分のパディング

4

5 に答える 5

3

printf()関数を使用して整数を埋めることもできます:

コードパッド)のようなもの:

<?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
于 2012-07-08T14:00:53.847 に答える
3

いいえ、簡単な方法はありません。

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

    return str_repeat('0', max(0, $len - 1 - floor(log($intPart, 10)))) . $n;
}
于 2012-07-08T13:51:08.710 に答える
1

迅速な解決策: http: //codepad.org/EXcbqGos

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

負でない数に対してのみ機能します。

于 2012-07-08T13:49:00.283 に答える
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

printfを使用してfloatを印刷するときに、余分な先行ゼロがありますか?

于 2012-07-08T14:03:05.737 に答える
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
于 2012-07-08T14:08:46.123 に答える