浮点数数学运算

时间:2015-04-30 14:17:26

标签: math floating-point tcl

我有一个.txt文件作为包含一些感兴趣的值的程序的输出。问题是,在某些情况下,这些值的格式很奇怪,而且我无法对它们应用数学运算。

例如:我的文件包含以下数字:

-2.55622-3   
-0.31-2
-3.225-2
...

正常数学格式的这些数字应为:

-2.55622e-03
-0.31e-02
-3.225e-02

当然,如果我尝试对这些值求和,这就是错误:

can't use non-numeric string as operand of "+"

我如何使用原始值进行操作?我真的没有想法。 请记住,我无法更改.txt文件的值格式

2 个答案:

答案 0 :(得分:4)

另一种方法:

% exec cat file
-2.55622-3   
-0.31-2
-3.225-2
42
foo
% set fh [open "file" r]
% while {[gets $fh line] != -1} {
  puts -nonewline "\"$line\"\t=> "
  if {! [regsub {[-+]\d+$} [string trim $line] {e&} num]} {set num $line}
  puts -nonewline "$num\t=> "
  puts [expr {$num + 0}]
}
"-2.55622-3   " => -2.55622e-3  => -0.00255622
"-0.31-2"       => -0.31e-2     => -0.0031
"-3.225-2"      => -3.225e-2    => -0.03225
"42"    => 42   => 42
can't use non-numeric string as operand of "+"
"foo"   => foo  => % 

答案 1 :(得分:0)

尝试使用模式(\d+.\d+)注册数字。

set fp [open "somefile.txt" r]
set file_data [read $fp]
close $fp
set data [split $file_data "\n"]
foreach line $data {
set e "e"
set number [ regexp -all -inline {(\d+.\d+)} $line ]
regsub -all {(\d+.\d+)} $number "$number$e" number

}

例如读取文件并按行分割。

set e "e"

按以下方式查找号码:

set number [ regexp -all -inline {(\d+.\d+)} $line ]

然后替换

regsub -all {(\d+.\d+)} $number "$number$e" number