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



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

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

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

1.5776600e-006

但我会得到:

1.58e-06

我只想要指数项的 2 位数字。

AFAIK不能指定指数中的位数。解决方法是分别设置两个部分的格式:

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 命令不能让你控制指数位数,但我可以通过使用不同的格式得到你想要的结果:

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

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

最新更新