如何在Julia中进行字符串插值格式化?

35
在Python 3中,我会
print_me = "Look at this significant figure formatted number: {:.2f}!".format(floating_point_number)
print(print_me)
或者
print_me = f"Look at this significant figure formatted number: {floating_point_number:.2f}!"
print(print_me)

在Julia中

print_me = "Look at this significant figure formatted number: $floating_point_number"
print(print_me)

但这将产生如下结果

Look at this significant figure formatted number: 61.61616161616161

我该如何让 Julia 限制其显示的小数位数?需要注意的是,据我所知,必须存储要打印的字符串,这使得使用 @printf 宏成为不可能。

这种方法可以运行,但似乎在风格上不太正确。

floating_point_number = round(floating_point_number,2)
print_me = "Look at this significant figure formatted number: $floating_point_number"
print(print_me)
4个回答

36

您可以使用标准库包Printf中的@sprintf宏。与@printf不同,它返回一个字符串而不仅仅是将其打印出来。

using Printf
x = 1.77715
print("I'm long: $x, but I'm alright: $(@sprintf("%.2f", x))")

输出:

I'm long: 1.77715, but I'm alright: 1.78

根据我的经验,在 Julia 1.0.0 REPL 中使用 @sprintf 宏之前,你需要添加 using Printf。 - Julia Learner
谢谢!我已经修改答案以反映1.0的更改。 - niczky12
感谢您更新您的采纳答案。这将有助于那些可能不知道 @sprintf 宏不是内置于核心 Julia 语言的新手。我刚刚接触 Julia,版本为 1.0.0,我假设您之前展示的 Julia 代码适用于早期版本的 Julia。 - Julia Learner

22

除了@niczky12的回答外,您还可以使用Formatting包,该包专门为此类事情而设计!

Pkg.add("Formatting")
using Formatting: printfmt
x = 1.77715
printfmt("I'm long: $x, but I'm alright: {:.2f}", x)

输出:

I'm long: 1.77715, but I'm alright: 1.78 

6

虽然它仍在不断完善中(我需要添加一堆单元测试,并且我想添加Python 3.6风格的模式),但您也可以使用我的StringUtils.jl包,它为字符串文字添加了类似C和Python的格式化、Swift样式插值、Emoji、LaTex和Html以及Unicode命名字符。

Pkg.clone("https://github.com/ScottPJones/StringUtils.jl")
Pkg.checkout("StringUtils")

using StringUtils

x = 1.77715
print(u"I'm long: \(x), but I'm alright: \%.2f(x)")

输出:

I'm long: 1.77715, but I'm alright: 1.78

0
你的原始解决方案在Julia 1.8中可以正常工作,无需任何额外的导入。它可以按照指定的有效数字进行四舍五入,如下所示。
floating_point_number = 100.457894
rounded_floating_point_number = round(floating_point_number,digits=2)
print_me = "Look at this significant figure formatted number: $rounded_floating_point_number"
println(print_me)

输出

Look at this significant figure formatted number: 100.46

2
OP没有说这个方法有效吗?不过,OP也提到这似乎在风格上不正确。 - AKdemy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接