1 回答

TA貢獻1841條經驗 獲得超3個贊
value1
和 是指針,因此比較這些指針,而不是指向的值。可能有 2 個指向的對象相等,但它們的地址不相等。value3
value1 == value3
比較大。浮點
值(或 ),請使用浮點值
。如果 2 個值(它們表示的數字)相等,則返回。*big.Float
0
if value1.Cmp(value3) == 0 {
fmt.Println("values are equal", value1, value3)
} else {
fmt.Println("values are not equal", value1, value3)
}
有了這個變化,輸出將是(在Go Playground上嘗試):
values are equal 1.3719531185501585e+11 1.3719531185501585e+11
difference is here:
[1 2 0 0 0 53 0 0 0 37 255 139 210 151 120 32 120 0]
[1 10 0 0 0 53 0 0 0 37 255 139 210 151 120 32 120 0]
因此,表示的數字是相等的。
Float.GobEncode()
返回的序列化二進制形式是不一樣的,但這并不意味著表示的數字不相等。正如其文檔所述:
戈布代碼實現了這個貪婪。Gob編碼器接口。將封送處理 Float 值及其所有屬性(精度、舍入模式、準確性)。
輸出是不同的,因為 的內部結構不相同(在本例中為精度)。在這種情況下,即使您可以比較指向的對象,這些對象也不會相同,但表示的數字是相同的。同樣,始終使用提供的方法比較復雜對象,當然不是地址。big.Float
此示例中的差異來自存儲的精度字段:
fmt.Println(value1.Acc()) fmt.Println(value3.Acc())
哪些輸出(在Go游樂場上嘗試):
Below Exact
返回的精度是“最近操作產生的x的精度”。由于在 和 上執行的最后一個操作不相同( 和 ),因此精度字段不一定相同(并且在此示例中它們確實不同)。由于準確性屬性也包含在 Gob 序列化表單中,因此它們的序列化表單不同。Float.Acc()
value1
value3
value1.Sub()
value3.Set()
- 1 回答
- 0 關注
- 103 瀏覽
添加回答
舉報