我通常使用%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
中执行此操作,还是必须编写特殊的包装器?
答案 0 :(得分:4)
不,你必须编写一个自定义包装器来获取你描述的行为:正如perlfunc所说:
对于“g”和“G”,[精度]指定 要显示的最大位数, 包括小数点前的那些 点和后面的那些;
请注意,简单浮点表示中的前导零不计为“数字”。
CPAN上有一些模块可以帮助你编写类似sprintf的函数。 String::Sprintf用于向常规sprintf
格式添加一两个自定义格式。 String::Formatter用于从头开始,其函数看起来像sprintf
,但不会从中继承任何格式。