Когда числа конвертируются в строки они должны быть отформатированы должным образом. Форматирование числа предполагает, что оно выводится с данным числом, состоящим из целых и десятичных значений. Представление значения можно выбрать. Процесс сопровождается проблемой с локализацией форматирования чисел. К примеру, в некоторых языках используются нули, разделенные запятыми.
Как форматировать числа в Golang?
1. Создайте файл format.go
со следующим содержимым:
Рекомендуем вам супер TELEGRAM канал по Golang где собраны все материалы для качественного изучения языка. Удивите всех своими знаниями на собеседовании! 😎
Мы публикуем в паблике ВК и Telegram качественные обучающие материалы для быстрого изучения Go. Подпишитесь на нас в ВК и в Telegram. Поддержите сообщество Go программистов.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
package main import ( "fmt" ) var integer int64 = 32500 var floatNum float64 = 22000.456 func main() { // Обычный способ вывода десятичного числа fmt.Printf("%d \n", integer) // Всегда показывает знак fmt.Printf("%+d \n", integer) // Вывод с другим основанием x -16, o-8, b -2, d - 10 fmt.Printf("%x \n", integer) fmt.Printf("%#x \n", integer) // Отступ перед нулями fmt.Printf("%010d \n", integer) // Оставляет отступ с пробелами fmt.Printf("% 10d \n", integer) // Отступ с правой стороны fmt.Printf("% -10d \n", integer) // Вывод вещественного значения // с плавающей запятой fmt.Printf("%f \n", floatNum) // Вещественное число // с ограниченной точностью = 5 (после запятой) fmt.Printf("%.5f \n", floatNum) // Вещественное число // в научной заметке fmt.Printf("%e \n", floatNum) // Вещественное число // %e для крупной экспоненты // или %f в противном случае fmt.Printf("%g \n", floatNum) } |
2. Запустите код в терминале через go run format.go
;
3. Посмотрите на вывод:
1 2 3 4 5 6 7 8 9 10 11 |
32500 +32500 7ef4 0x7ef4 0000032500 32500 32500 22000.456000 22000.45600 2.200046e+04 22000.456 |
4. Создайте файл localized.go
со следующим содержимым:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
package main import ( "golang.org/x/text/language" "golang.org/x/text/message" ) const num = 100000.5678 func main() { p := message.NewPrinter(language.English) p.Printf(" %.2f \n", num) p = message.NewPrinter(language.German) p.Printf(" %.2f \n", num) } |
5. Запустите код в терминале через go run localized.go
;
6. Посмотрите на вывод:
1 2 |
100,000.57 100.000,57 |
Как правильно форматировать числа в Golang?
В примере кода выше показан наиболее часто используемых опций для целочисленных (integer) и вещественных (float) значений. Форматировани в Go заимствовано из функции C — printf
. Так называемые verbs
используются для определения форматируемого числа. Это может быть специальный символ %X
, что является плейсхолдером для значения.
Помимо всего прочего в форматировании есть правила, что связаны с локальными манерами. Для форматирования в соответствии с локальностью можете ознакомиться с данным пакетом. С ним поможет разобраться второй код из примера выше. В таком случае возможно локализовать форматирование числа.
Для всех опций форматирования используется пакет fmt
. Пакет strconv
также может быть полезен в случае, если вам нужно форматировать числа с другой основой. В следующей статье мы рассмотрим возможность конвертации числа, а также побочный эффект того, как представляются форматированные числа с другой основой.
Администрирую данный сайт с целью распространения как можно большего объема обучающего материала для языка программирования Go. В IT с 2008 года, с тех пор изучаю и применяю интересующие меня технологии. Проявляю огромный интерес к машинному обучению и анализу данных.
E-mail: vasile.buldumac@ati.utm.md
Образование
Технический Университет Молдовы (utm.md), Факультет Вычислительной Техники, Информатики и Микроэлектроники
- 2014 — 2018 Universitatea Tehnică a Moldovei, ИТ-Инженер. Тема дипломной работы «Автоматизация покупки и продажи криптовалюты используя технический анализ»
- 2018 — 2020 Universitatea Tehnică a Moldovei, Магистр, Магистерская диссертация «Идентификация человека в киберпространстве по фотографии лица»