我需要用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
答案 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
可能有用的链接是:
答案 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