Невозможно округлить до ближайшего .0001 - PullRequest
0 голосов
/ 04 июня 2018

У меня есть следующее:

package main

import (
    "fmt"
    "math"
)

func main() {
    nums := []float64{
        0.15807659924030304, 0.10901273787021637, 0.04955724626779556, 0.05886702239513397,
    }

    for _, f := range nums {
        fmt.Println(f, math.Round(f/.0001)*.0001)
    }
}

вывод:

0.15807659924030304 0.15810000000000002
0.10901273787021637 0.109
0.04955724626779556 0.049600000000000005
0.05886702239513397 0.0589

Почему некоторые заканчиваются> 4 десятичными разрядами?Как мне исправить это?

https://play.golang.org/p/kLvVjmsjq6Y

1 Ответ

0 голосов
/ 04 июня 2018
        fmt.Printf("%f %b %0.4f\n", f, f, math.Round(f/.0001)*.0001)

Попробуйте использовать это.%0.4f отформатирует его до 4 десятичных знаков.Фактически, если вам нужна только строка, используйте ее вместо функции Round.

%b покажет вам реальное значение.В Go, который будет отображать большое десятичное (base-10) значение, ap, а затем показатель степени в степенях 2. Поэтому, когда он отображает 5695309707476992p-55, вы можете найти число с плавающей запятой, выполнив 5695309707476992 / 2^55

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