Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Julia 切碎从无用的零开始浮动_Julia - Fatal编程技术网

Julia 切碎从无用的零开始浮动

Julia 切碎从无用的零开始浮动,julia,Julia,我看到julia在打印浮动时有一些%f风格。 我想知道在设置某个输出文件的名称时是否可以做到这一点。我的意思是,在我的课程中,我有如下内容: ... for epsilon in epsilon_array ... printfile = open("outputfile_epsilon$(epsilon).dat", "w") ... end ... 例如,如果我有epsilon=0.010000000(float64),我希望输出文件的名称就是outputfile\

我看到julia在打印浮动时有一些
%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,我得到了所需的浮点。我认为这可能是一个小错误。。