Как вы форматируете строку при интерполяции в Julia?

в 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)

Джулия

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

но это дало бы сказать

Look at this significant figure formatted number: 61.61616161616161

как заставить Джулию ограничить количество десятичных знаков, которые она отображает? Обратите внимание, что необходимое хранение строки для печати, насколько мне известно, исключает использование @printf макрос.

это работает, но не кажется стилистически правильно.

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

3 ответов


можно использовать @sprintf макрос из стандартного пакета библиотека Printf. Это возвращает строку, а не просто печатает ее как @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

в дополнение к ответу @niczky12 вы также можете использовать форматирование пакет предназначен именно для этого типа вещей!

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 

пока он все еще работает (мне нужно добавить кучу модульных тестов, и я хочу добавить режим стиля Python 3.6), вы также можете использовать my StringUtils.jl пакет, который добавляет C и Python, такие как форматирование, интерполяция Swift style, 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