我觉得很难用Julia格式化数字:
b = 1.111111
bb = @printf "test : %5.2f" b
bb
test : 1.11
Run Code Online (Sandbox Code Playgroud)
那样就好.
using PyPlot
annotate(@printf "test : %5.2f" b, xy=[1;1])
test :
type: non-boolean (Array{Bool,1}) used in boolean context
while loading In[16], in expression starting on line 2
Run Code Online (Sandbox Code Playgroud)
我不明白,因为我希望@printf的结果是一个String.所以,如果有人可以解释我应该怎么做
"test : %5.2f" % b
Run Code Online (Sandbox Code Playgroud)
在Python中.
总而言之,这是奇怪的事情:
b
1
Run Code Online (Sandbox Code Playgroud)
b已投射到Int.你会称那个错误吗?
我使用Julia 0.3.2和Jupyter 3.1
Mat*_* B. 12
宏解析(特别是在函数调用的上下文中)有点挑剔.您可以通过引用它来了解Julia如何解析它:
julia> :(annotate(@printf "test : %5.2f" b, xy=[1;1]))
:(annotate(@printf "test : %5.2f" (b,xy) = [1,1]))
Run Code Online (Sandbox Code Playgroud)
如您所见,宏比函数参数"更贪婪".整个b, xy=[1;1]部分被视为@printf宏的唯一参数.这解释了为什么b更改的值- =已经将上下文从表示关键字参数更改为一般的元组赋值!
我强烈建议在更复杂的表达式中使用类似函数的语法,如下所示:
annotate(@sprintf("test : %5.2f", b), xy=[1;1])
Run Code Online (Sandbox Code Playgroud)
最后,请注意,我已经改变@printf到@sprintf.前者返回nothing并简单地输出值,而后者返回一个可以传递给函数的字符串.
| 归档时间: |
|
| 查看次数: |
195 次 |
| 最近记录: |