TCL/TK如何定义科学计数法中的浮点精度

TCL/TK How to define floating point precision in scientific notation

在 TCL 中,如何设置以科学格式表示的浮点数的精度? 我需要设置最大宽度为 8 个字符。

set number 1.57766e-06
puts $Output "[format "%-.7e" $number]"

它对我不起作用,因为我获得了:

1.5776600e-006

但我会得到:

1.58e-06

我只需要 2 位数的指数项。

据我所知,无法指定指数中的位数。解决方法是分别格式化两个部分:

lassign [split $number e] mantissa exponent
set number [format %.2f $mantissa]e[format %+03d $exponent]

此命令可以格式化带和不带指数部分的数字:

(编辑而不是测试和替换指数,可以确保有指数部分。)

proc fmtnum number {
    lassign [split [format %.2e $number] e] mantissa exponent
    return ${mantissa}e[format %+03d $exponent]
}

文档:format, lassign, split

format命令不能让你控制指数位数,但我可以通过使用不同的格式得到你想要的结果:

% set number 1.57766e-06
1.57766e-06
% format %.2e $number
1.58e-06

我发现在选择复杂格式时,在交互式 shell 中进行实验会有所帮助。