使用%03.3f填充不起作用

时间:2013-09-16 21:10:57

标签: php lua printf string-formatting

我有以下功能(在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.XYP或两者都可以为零。

但是我得到一个简单的输出(与Q相同)并且填充部分(%.2f)似乎没有任何效果。以下是代码板链接(for PHPfor Lua)的示例;我将一个数字 1285854482 传递给该函数。输出为 %03 ,而不是 1.20 GiB

2 个答案:

答案 0 :(得分:4)

您似乎误解了%.f格式规范的说明:此 - %03.2f - 实际上意味着'分配至少 3个符号来表示一个数字,至少2个它们用于表示其非整数部分'。请注意,此2中不包含句号,但会将其包含在3中,因此此格式化程序实际上从未达到其“最小值”。 )

将其更改为'%06.2f',它将按预期工作:6个符号,3个将用于句号符号和2个数字后,因此3个用于表示数字的整数部分

答案 1 :(得分:1)

阿。在完成C++ reference on printf之后找到解决方案,其中说明了%符号后面的数字:

  

要打印的最小字符数。如果要打印的值   比这个数字短,结果用空格填充。   即使结果较大,也不会截断该值。