Потеря точности преобразования строки в число с плавающей точкой - PullRequest
0 голосов
/ 13 января 2019

Задача

При преобразовании string в float64 дробная часть float64 теряет значительное количество чисел.

код

origVal := "0.00000628"
convVal, err := strconv.ParseFloat(origVal, 64)
if err == nil {
    fmt.Printf("Original value: %s\nConverted value: %f\n", origVal, convVal)
}

Выходы:

Original value: 0.00000628
Converted value: 0.000006

Код доступен на игровой площадке Go: https://play.golang.org/p/a8fH_JGug7l

Контекст

Я получаю данные из API. Этот API переводит числа с плавающей запятой. Я преобразую эти строковые числа в числа с плавающей точкой, потому что я хочу сделать с ними некоторую базовую арифметику.
Я довольно новичок в Go, поэтому приношу свои извинения, если ответ прост.

1 Ответ

0 голосов
/ 13 января 2019

Проблема заключалась не в том, что строка была неправильно преобразована, а в том, что Printf по умолчанию не выводит полную дробную часть, если она длинная. Следующий код печатает так же, как исходный код, но с 10 цифрами после десятичной точки:

origVal := "0.00000628"
convVal, err := strconv.ParseFloat(origVal, 64)
if err == nil && err2 ==nil {
    fmt.Printf("Original value: %s\nConverted value: %.10f\n", origVal, convVal)
}

Спасибо @ usr2564301 за быстрый ответ!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...