我尝试使用Julia和我在保存数据时如何确定浮点数和小数点的长度有一些疑问。
输入文件的名称为"L100_A100_C100.dat“,其数据如下所示:
SIMULATION RESULTS
0.599566E+00 0.666925E-06 0.3348E+02 0.2527E+03 -0.6948E+04
0.599633E+00 0.666924E-06 0.3394E+02 0.2529E+03 -0.6949E+04
0.599699E+00 0.666922E-06 0.3424E+02 0.2528E+03 -0.6949E+04
0.599766E+00 0.666920E-06 0.3440E+02 0.2527E+03 -0.6949E+04
0.599833E+00 0.666919E-06 0.3460E+02 0.2525E+03 -0.6948E+04
0.599899E+00 0.666919E-06 0.3488E+02 0.2522E+03 -0.6948E+04
0.599966E+00 0.666919E-06 0.3530E+02 0.2520E+03 -0.6948E+04
所以我编写了如下程序:
file = open("L100_A100_C100.dat", "r")
data = readdlm(file, Float64, skipstart=1)
writedlm("output.txt", data)
输出是
0.599566 6.66925e-7 33.48 252.7 -6948.0
0.599633 6.66924e-7 33.94 252.9 -6949.0
0.599699 6.66922e-7 34.24 252.8 -6949.0
0.599766 6.6692e-7 34.4 252.7 -6949.0
0.599833 6.66919e-7 34.6 252.5 -6948.0
0.599899 6.66919e-7 34.88 252.2 -6948.0
0.599966 6.66919e-7 35.3 252.0 -6948.0
但我的问题是如何确定浮点数和小数点的长度(就像Python中的'%10.3f'
)?
发布于 2021-05-29 08:11:29
在朱莉娅,printf
可以作为一个macro
。Julia宏是在编译时生成其他Julia代码的Julia代码的一部分。在这种情况下,在编译时,宏@sprintf
生成一个格式化对象(这也验证了格式化字符串)和格式化代码。稍后,在运行时执行实际的格式设置。
因此,你可以:
julia> x = rand(2,3)
2×3 Matrix{Float64}:
0.475864 0.285398 0.969636
0.46037 0.708167 0.45792
julia> using Printf
julia> m = (a->(@sprintf "%10.3f" a)).(x)
2×3 Matrix{String}:
" 0.476" " 0.285" " 0.970"
" 0.460" " 0.708" " 0.458"
现在,您有了直接转储到文件中的预先格式化文本矩阵(我使用的是stdout
):
julia> writedlm(stdout, m, "" , quotes=false)
0.476 0.285 0.970
0.460 0.708 0.458
https://stackoverflow.com/questions/67752425
复制