如何使用sprintf控制Perl中的浮点格式?

时间:2010-12-19 16:40:17

标签: perl printf

我通常使用%g,但似乎是the number of exponent digits is system-dependent,我无法使用%.4g%.2g之类的变体(它们只会产生相同的结果,不要他们?)。

如果数字(绝对值)在某个范围内(例如10 ^ 5> | x |> 10 ^ -5),我实际想要做的是“尽可能”使用简单的浮点表示,否则使用科学记数法。我也想限制显示的位数,比如说5(所以我不会得到超大的浮点数,比如0.12345678901234567890 ......)。

一些例子:

0.123456890 - > 0.12346

0.000000000123456 - > 1.23456e-10

我可以直接在sprintf中执行此操作,还是必须编写特殊的包装器?

1 个答案:

答案 0 :(得分:4)

不,你必须编写一个自定义包装器来获取你描述的行为:正如perlfunc所说:

  

对于“g”和“G”,[精度]指定   要显示的最大位数,   包括小数点前的那些   点和后面的那些;

请注意,简单浮点表示中的前导零计为“数字”。

CPAN上有一些模块可以帮助你编写类似sprintf的函数。 String::Sprintf用于向常规sprintf格式添加一两个自定义格式。 String::Formatter用于从头开始,其函数看起来像sprintf,但不会从中继承任何格式。