Плавающая точка неточна.Используйте целые числа (int64
), масштабированные до центов или дробных центов.
Например, центы,
package main
import (
"fmt"
)
func main() {
cents := int64(0)
for i := 0; i <= 2; i++ {
cents += 15
fmt.Println(cents)
}
fmt.Printf("$%d.%02d\n", cents/100, cents%100)
}
Детская площадка: https://play.golang.org/p/k4mJZFRUGVH
Выход:
15
30
45
$0.45
Например, округлены до сотых долей цента,
package main
import "fmt"
func main() {
c := int64(0) // hundredths of a cent
for i := 0; i <= 2; i++ {
c += 1550
fmt.Println(c)
}
c += 50 // rounded
fmt.Printf("$%d.%02d\n", c/10000, c%10000/100)
}
Детская площадка: https://play.golang.org/p/YGW9SC7OcU3
Вывод:
1550
3100
4650
$0.47