在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/GO/ go float 精度丟失問題

go float 精度丟失問題

一些特定的小數(shù)用于計算總是出現(xiàn)精度問題, 不知道go語言是怎么處理這個問題的.
搞不懂的是第一個 兩個變量 a,b 都是同一個類型,為什么相減還是會出現(xiàn)精度問題

package main

import "fmt"

func main() {

    a := 143.66
    b := 14.55
    c := a - b
    // c = c * 100
    fmt.Println(c)
    fmt.Printf("s = %T\n", a)
    fmt.Printf("s = %T\n", b)
    fmt.Printf("s = %T\n", c)

    d := 1129.6

    fmt.Println((d * 100))

}

打印的值如下:

129.10999999999999
s = float64
s = float64
s = float64
112959.99999999999
回答
編輯回答
幼梔

你會發(fā)現(xiàn)幾乎所有的編程語言都有這個問題,這是典型的二進制浮點數(shù)精度損失問題,在定長條件下,二進制小數(shù)和十進制小數(shù)互轉(zhuǎn)可能有精度丟失,就會造成上述現(xiàn)象。

解決方案就是使用精確計數(shù)算法,比如Java是使用BigDecimal這個特殊類實現(xiàn)了這個算法。

對應到go就是在big這個package下實現(xiàn)的功能: https://golang.org/pkg/math/big/

2018年1月12日 02:36
編輯回答
裸橙

這個和語言無關,所有的語言都是這樣的,只要是float或者double類型都有這個問題,因為他們本身就是有誤差的,如果要做到無誤差,Java有個BigDecimal可以用。

2018年1月9日 09:37