Перейти к выпуску fmt float64

Я наткнулся на небольшую ошибку в моем понимании пакета go fmt

Это относится к следующему коду:

импорт "фмт"

func main() {
    var smallFloat float64 = 0.123456789
    var bigFloat float64 = 123456789000

    fmt.Println(fmt.Sprintf("%f", smallFloat))
    fmt.Println(fmt.Sprintf("%f", bigFloat))
}

Выход:

0.123457
123456789000.000000

Я не хочу использовать научную нотацию, поэтому думал, что%f будет соответствовать моим потребностям. Я могу видеть на странице форматирования ( https://golang.org/pkg/fmt/), что это говорит:

The default precision for %e and %f is 6; for %g it is the smallest number of digits necessary to identify the value uniquely.

Есть ли способ использовать пакет fmt, который позволил бы мне представить полное десятичное значение smallFloat, при этом не добавляя 6 нулей в конец bigFloat?

1 ответ

Решение

Ты можешь использовать strconv.FormatFloat с предварительным значением -1:

fmt.Println(strconv.FormatFloat(big, 'f', -1, 64))
fmt.Println(strconv.FormatFloat(small, 'f', -1, 64))

печать

123456789000
0.123456789

Детская площадка: http://play.golang.org/p/7p8xnQ_BzE.

Другие вопросы по тегам