使用%03.3f填充不起作用。

我有以下 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

返回语句使用 %03.2f 应该以 PQR.XY 格式返回输出,其中 PQ 或两者都可以为零。

但是我得到的是一个简单的输出(与 %.2f 相同),并且填充部分(%03)似乎毫无影响。这是一个 codepad 链接(用于 PHP)和 for Lua 的示例链接;我将数字 1285854482 传递给函数。输出结果为 1.20 GiB 而不是 **001.20 GiB**。

点赞
用户1229023
用户1229023

你似乎误解了 %.f 格式规范的描述:这个规范 %03.2f 实际上是指“至少分配 3 个符号来表示一个数字,其中至少有 2 个用于表示它的非整数部分”。请注意,句号不包括在这个 2 中,但包括在 3 中,所以这个格式化器实际上从来没有达到它的“最少”要求。

将它改为 '%06.2f',它就会按照你的期望工作:6 个符号中,3 个将被用于句号符号和两个位数后面的数字,因此剩下 3 个表示数字的整数部分。

2013-09-16 21:14:54
用户1190388
用户1190388

啊,经过查看C++ printf 的参考资料后,我找到了解决方案。该参考资料关于%符号后面的数字说明如下:

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

2013-09-16 21:15:55