2015-11-10 6 views
-3

Как поплавок арифметика работа в GoGolang поплавок арифметика

площадка link

package main 

import "fmt" 

func main() { 
    j := 1.021 
    fmt.Println(j) 
    k := j*1000 
    fmt.Println(k) 
    l := int(k) 
    fmt.Println(l) 
} 

Output: 
1.021 
1020.9999999999999 
1020 

Я ожидал 1021 для печати, но я получил 1020

+1

Может быть, ваш сюрприз приходит от игнорирования, что 1,021 не совсем фракция 1021/1000, но как можно ближе к поплавку этой фракции ... Пожалуйста, прочитайте рекомендуется литература с тегом с плавающей точкой. –

+0

Спасибо. Это разъясняет это. Интересно, что я не понимал, почему у меня возникли проблемы с вопросом. Я действительно искал вокруг и не мог найти ясную причину. Каким-то образом я думал, что это особенность Go, в то время как это кажется очень общим. – Sundar

+0

@ ThomasPadron-McCarthy да, это так. Благодарю. Интересно, что пост получил 811 upvotes, а мой -3. – Sundar

ответ

2

Go, как и все остальные, использует Бинарная арифметика с плавающей запятой IEEE-754. Арифметика с плавающей точкой неточна для некоторых десятичных значений.

Ссылка:

Floating point

IEEE floating point