1 回答

TA貢獻(xiàn)1841條經(jīng)驗(yàn) 獲得超3個(gè)贊
value1
和 是指針,因此比較這些指針,而不是指向的值??赡苡?2 個(gè)指向的對(duì)象相等,但它們的地址不相等。value3
value1 == value3
比較大。浮點(diǎn)
值(或 ),請(qǐng)使用浮點(diǎn)值
。如果 2 個(gè)值(它們表示的數(shù)字)相等,則返回。*big.Float
0
if value1.Cmp(value3) == 0 {
fmt.Println("values are equal", value1, value3)
} else {
fmt.Println("values are not equal", value1, value3)
}
有了這個(gè)變化,輸出將是(在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]
因此,表示的數(shù)字是相等的。
Float.GobEncode()
返回的序列化二進(jìn)制形式是不一樣的,但這并不意味著表示的數(shù)字不相等。正如其文檔所述:
戈布代碼實(shí)現(xiàn)了這個(gè)貪婪。Gob編碼器接口。將封送處理 Float 值及其所有屬性(精度、舍入模式、準(zhǔn)確性)。
輸出是不同的,因?yàn)?的內(nèi)部結(jié)構(gòu)不相同(在本例中為精度)。在這種情況下,即使您可以比較指向的對(duì)象,這些對(duì)象也不會(huì)相同,但表示的數(shù)字是相同的。同樣,始終使用提供的方法比較復(fù)雜對(duì)象,當(dāng)然不是地址。big.Float
此示例中的差異來自存儲(chǔ)的精度字段:
fmt.Println(value1.Acc()) fmt.Println(value3.Acc())
哪些輸出(在Go游樂場(chǎng)上嘗試):
Below Exact
返回的精度是“最近操作產(chǎn)生的x的精度”。由于在 和 上執(zhí)行的最后一個(gè)操作不相同( 和 ),因此精度字段不一定相同(并且在此示例中它們確實(shí)不同)。由于準(zhǔn)確性屬性也包含在 Gob 序列化表單中,因此它們的序列化表單不同。Float.Acc()
value1
value3
value1.Sub()
value3.Set()
- 1 回答
- 0 關(guān)注
- 95 瀏覽
添加回答
舉報(bào)