Julia 切碎从无用的零开始浮动
我看到julia在打印浮动时有一些Julia 切碎从无用的零开始浮动,julia,Julia,我看到julia在打印浮动时有一些%f风格。 我想知道在设置某个输出文件的名称时是否可以做到这一点。我的意思是,在我的课程中,我有如下内容: ... for epsilon in epsilon_array ... printfile = open("outputfile_epsilon$(epsilon).dat", "w") ... end ... 例如,如果我有epsilon=0.010000000(float64),我希望输出文件的名称就是outputfile\
%f
风格。
我想知道在设置某个输出文件的名称时是否可以做到这一点。我的意思是,在我的课程中,我有如下内容:
...
for epsilon in epsilon_array
...
printfile = open("outputfile_epsilon$(epsilon).dat", "w")
...
end
...
例如,如果我有epsilon=0.010000000
(float64),我希望输出文件的名称就是outputfile\u epsilon0.1.dat
编辑:
例如,考虑下面的“填充”数组:
epsilon_array = zeros(Float64,100)
iijj = 0.0
for ii in 1:100
epsilon_array[ii] = iijj
iijj += 0.01
end
如果我查看某个输出文件,我将有:
outputfile_epsilon0.9500000000000006.dat
所以问题是,浮点的末尾有一个讨厌的数字,这迫使julia打印整个整数。您可以使用
rstrip()
函数,该函数将从字符串的右侧删除给定字符的实例(请参阅文档)。例如
编辑:但我不确定这里是否需要任何格式。如果您的数字确实存储为浮点数,则尾随的零不应与它们一起存储。例如,即使没有上述示例中的rstrip()
,我也会得到:
julia> epsilon_array = [0.010000000, 0.02000000]
2-element Array{Float64,1}:
0.01
0.02
julia> for epsilon in epsilon_array
println("outputfile_epsilon$(epsilon).dat")
end
outputfile_epsilon0.01.dat
outputfile_epsilon0.02.dat
您可以使用
rstrip()
函数,该函数将从字符串右侧删除给定字符的实例(请参阅文档)。例如
编辑:但我不确定这里是否需要任何格式。如果您的数字确实存储为浮点数,则尾随的零不应与它们一起存储。例如,即使没有上述示例中的rstrip()
,我也会得到:
julia> epsilon_array = [0.010000000, 0.02000000]
2-element Array{Float64,1}:
0.01
0.02
julia> for epsilon in epsilon_array
println("outputfile_epsilon$(epsilon).dat")
end
outputfile_epsilon0.01.dat
outputfile_epsilon0.02.dat
这里问题的症结似乎是你没有考虑求和时的舍入误差。Float64不能精确表示0.01,因此计算机会存储最接近的近似值。每次在计算中使用epsilon时,都会增加结果误差。range和linspace函数都知道这一点,因此能够避免问题:
iijj = 0:0.01:1
for ii in 1:100
epsilon_array[ii] = iijj[ii]
end
或者,您可能会决定始终希望打印2位数字,在这种情况下,您可以对文件名使用printf样式的格式:
open(@sprintf("outputfile_epsilon%.2f.dat", epsilon), "w")
这里问题的症结似乎是你没有考虑求和时的舍入误差。Float64不能精确表示0.01,因此计算机会存储最接近的近似值。每次在计算中使用epsilon时,都会增加结果误差。range和linspace函数都知道这一点,因此能够避免问题:
iijj = 0:0.01:1
for ii in 1:100
epsilon_array[ii] = iijj[ii]
end
或者,您可能会决定始终希望打印2位数字,在这种情况下,您可以对文件名使用printf样式的格式:
open(@sprintf("outputfile_epsilon%.2f.dat", epsilon), "w")
也许这篇文章可以帮助你:。也许这篇文章可以帮助你:。我取消标记这个问题是因为我有一个bug。我添加了一些编辑来比较我为什么要求修剪零。@user2820579在这种情况下,如何将数字
四舍五入()
,(您可以指定所需的小数精度)然后应用上述技术?没错,我只是改为25/100,我得到了所需的浮点。我认为这可能是一个小错误。我之所以取消这个问题,是因为我有一个小错误。我添加了一些编辑来比较我为什么要求修剪零。@user2820579在这种情况下,如何将数字四舍五入()
,(您可以指定所需的小数精度)然后应用上述技术?没错,我只是改为25/100,我得到了所需的浮点。我认为这可能是一个小错误。。