我有以下功能(在PHP中):
function FormatSize( $size ) {
$size = intval( $size );
$idx = 0;
$prefixes = array( "", "Ki", "Mi", "Gi", "Ti", "Pi" );
while( $size > 1024 ) {
$size = $size / 1024;
$idx++;
}
return sprintf( "%03.2f %sB", $size, $prefixes[$idx] );
}
以及lua中的以下内容
function GetSize( iSize )
local iSizeTemp, sPrefix, i = tonumber(iSize) or 0, {"", "Ki", "Mi", "Gi", "Ti", "Pi"}, 1
while iSizeTemp > 1024 do
iSizeTemp, i = iSizeTemp/1024, i+1
end
return string.format( "%03.2f %sB", iSizeTemp, sPrefix[i] )
end
return语句使用%03.2f
,它应该以{{1}}格式返回输出,其中PQR.XY
或P
或两者都可以为零。
但是我得到一个简单的输出(与Q
相同)并且填充部分(%.2f
)似乎没有任何效果。以下是代码板链接(for PHP和for Lua)的示例;我将一个数字 1285854482 传递给该函数。输出为 %03
,而不是 1.20 GiB
。
答案 0 :(得分:4)
您似乎误解了%.f
格式规范的说明:此 - %03.2f
- 实际上意味着'分配至少 3个符号来表示一个数字,至少2个它们用于表示其非整数部分'。请注意,此2
中不包含句号,但会将其包含在3
中,因此此格式化程序实际上从未达到其“最小值”。 )
将其更改为'%06.2f'
,它将按预期工作:6个符号,3个将用于句号符号和2个数字后,因此3个用于表示数字的整数部分
答案 1 :(得分:1)
阿。在完成C++ reference on printf
之后找到解决方案,其中说明了%
符号后面的数字:
要打印的最小字符数。如果要打印的值 比这个数字短,结果用空格填充。 即使结果较大,也不会截断该值。