2

我有以下功能(在 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.2fwhich 应该以PQR.XY格式返回输出,其中PQ两者都可以为零。

但是我得到了一个简单的输出(与 相同%.2f),而填充部分 ( %03) 似乎没有任何效果。以下是代码板链接(用于 PHPLua)的示例;我将一个数字1285854482传递给函数。输出1.20 GiB代替001.20 GiB.

4

2 回答 2

4

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

将其更改为'%06.2f',它将按您的预期工作:在 6 个符号中,3 个将用于句号符号和之后的两位数字,因此剩下 3 个用于表示数字的整数部分。

于 2013-09-16T21:14:54.477 回答
1

啊。在通过C++ 参考printf后找到了解决方案,该参考将后面的数字说明%为:

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

于 2013-09-16T21:15:55.100 回答