使用 TCL 将列表中的非科学值转换为科学值

Posted

技术标签:

【中文标题】使用 TCL 将列表中的非科学值转换为科学值【英文标题】:convert non-scientific values in a list to scientific values using TCL 【发布时间】:2020-06-05 03:27:30 【问题描述】:

我有一个包含科学和浮点数的值列表,需要将非科学值转换为科学值以进行列表操作。

set Y_value [list 1.215647671415354e-7 1.1284486163276597e-6 4.538622670224868e-5 4.4706815970130265e-5 8.492852430208586e-6 6.077577836549608e-6 3.1041158763400745e-6
0.00015045881445985287 4.1016753016265284e-7 1.165599314845167e-6 1.8736355968940188e-6 2.9444883693940938e-5 2.5420340534765273e-5 2.0819682049477706e-6 9.529731869406532e-6
8.549810104341304e-7 1.558014082547743e-5 8.079621693468653e-6 4.868444739258848e-5 0.0001646481396164745]

这是当前列表,我想将列表的浮点值转换为科学值,并使用 TCL 将它们存储在新列表中。

预期输出

1.2156476714e-04 1.1284486163e-03 4.5386226702e-02 4.4706815970e-02 8.4928524302e-03 6.0775778365e-03 
3.1041158763e-03 1.5045881446e-01 4.1016753016e-04 1.1655993148e-03 1.8736355969e-03 2.9444883694e-02
2.5420340535e-02 2.0819682049e-03 9.5297318694e-03 8.5498101043e-04 1.5580140825e-02 8.0796216935e-03
4.8684447393e-02 1.6464813962e-01

【问题讨论】:

看tcl.tk/man/tcl8.6/TclCmd/format.htm 【参考方案1】:

对于基于现有列表创建新列表,lmap 是要走的路。

类似:

set result [lmap y $Y_value  format %.10e [expr $y * 1000] ]

【讨论】:

请注意:lmap 很棒,但您需要 Tcl 8.6 @rtx13 考虑到它已经存在了多长时间,我为不使用 8.6 的人感到难过。【参考方案2】:

注意:您的示例输出值是输入值的 1000 倍。例如,输入1.215647671415354e-7 变为输出1.2156476714e-04。我在代码中添加了这个factor

你可以使用tclformat命令来做到这一点,如下:

set Y_value [list 1.215647671415354e-7 1.1284486163276597e-6 4.538622670224868e-5 4.4706815970130265e-5 8.492852430208586e-6 6.077577836549608e-6 3.1041158763400745e-6 \
0.00015045881445985287 4.1016753016265284e-7 1.165599314845167e-6 1.8736355968940188e-6 2.9444883693940938e-5 2.5420340534765273e-5 2.0819682049477706e-6 9.529731869406532e-6 \
8.549810104341304e-7 1.558014082547743e-5 8.079621693468653e-6 4.868444739258848e-5 0.0001646481396164745]

set factor 1000
set Y_value_scientific [list]
foreach v $Y_value 
    lappend Y_value_scientific [format %1.10e [expr $v*$factor]]


puts $Y_value_scientific


注意:如果您使用的是 Tcl 8.6 或更新版本,我建议使用 @Shawn 使用 lmap 的单行回答。

【讨论】:

以上是关于使用 TCL 将列表中的非科学值转换为科学值的主要内容,如果未能解决你的问题,请参考以下文章

在 Bigquery 中的 sum() 之后将科学记数法转换为浮点数

在 SQL 中转换/转换科学记数法 [从 Varchar 到 Decimal/Numeric]

将混合类型 DF 列中的浮点数转换为字符串使用科学记数法

将科学计数法中的十进制数转换为 IEEE 754

Pandas / 如何将存储为字符串的科学记数法转换为浮点数?

使用有限的类 C 库将科学计数法字符串中的数字转换为浮点数