«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как на самом деле работает поле точности с %g в fmt.Printf?

Как на самом деле работает поле точности с %g в fmt.Printf?

Опубликовано 8 ноября 2024 г.
Просматривать:414

How Does the Precision Field Actually Work with `%g` in `fmt.Printf`?

Неожиданное поведение fmt.Printf с полями ширины и точности для %g

Понимание неоднозначной документации

Документация для полей форматирования fmt.Printf для значений с плавающей запятой указано, что:

"Для значений с плавающей запятой ширина устанавливает минимальную ширину поля
, а точность устанавливает количество знаков после десятичной запятой, если
уместно, за исключением что для %g/%G он устанавливает общее количество цифр.»

Смущающая часть заключается в использовании слова «it» в последнем предложении. На самом деле это относится к «точности», а не к «ширине».

Истинное поведение %.9g

Вопреки интуитивному мнению, что %.9g должен давать в общей сложности 9 значащих цифр, это на самом деле учитываются только цифры после десятичной точки.

Например, 123456,789 будет отформатировано как 123.4e 03, поскольку %.9g эффективно усекает любые ведущие нули.

И наоборот, 0,0000012345 будет отформатировано как 1,2345 e-06, потому что %.9g учитывает все значащие цифры после десятичной точки.

Влияние ширины и точности

Поле ширины определяет минимальную ширину всей форматированной строки, включая десятичную дробь. точка и показатель степени (если есть).

Поле точности, как описано выше, задает количество значащих цифр после десятичной точки.

Для %g поле точности переопределяет поле ширины. . Однако, если отформатированная строка превышает указанную ширину, она выйдет за пределы указанной ширины.

Пояснение данного примера

Напомним, что пример включает в себя форматирование следующих значений с плавающей запятой с использованием .9g:

  • 0.0606060606060606
  • 0.33333333333333333
  • 0.05
  • 0.4
  • 0.1818181818181818
  • 0.0606060606060606: Точность 9 усекает ведущие нули, в результате чего получается 0,0606060606, что укладывается в ширину 10.
  • 0.3333333333333333: Как и в первом примере, результирующая строка 0,333333333 умещается в ширину 10.
  • 0.05: Имея только 2 значащие цифры, 0.05 дополняется пробелами, чтобы соответствовать минимальной ширине, равной 10.
  • 0.4: Аналогично 0,05, 0,4 также дополняется, чтобы соответствовать минимальной ширине, равной 10.
  • 0,1818181818181818: точность 9 дает 0,181818182 с округлением конечной 2 в большую сторону. Ширина этой строки не превышает 10.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3