1 回答

TA貢獻1829條經(jīng)驗 獲得超7個贊
Decimal128.h兩者Decimal128.l都是 type uint64,都有 64 位,加起來是 128 位。
| Decimal128.h bits || Decimal128.l bits |
63... ....0 63... ....0
Mongo-go 的實現(xiàn)Decimal128類似于/接近IEEE 754 四精度浮點格式,但有一些細微差別。最高位h是符號位,然后有 2 位被忽略,然后是 14 位指數(shù)和 111 位有效數(shù)。符號位旁邊的后續(xù) 5 位是特殊的,如果它們的值為0x1f,則表示該Decimal128值表示 NaN(不是數(shù)字),如果它們的值為0x1e,則該值表示正無窮或負無窮大(取決于符號位)。
查看該Decimal128.BigInt()方法的實現(xiàn)以獲取詳細信息。
如您所見,“單個”低值和高值與表示的浮點數(shù)沒有直接關(guān)系,而是按上述方式處理它們的 128 位。
例如,低值和高值"100.50"將是:
d, err := primitive.ParseDecimal128("100.50")
fmt.Println(d, err)
fmt.Printf("%#v", d)
輸出(在Go Playground上試試):
100.50 <nil>
primitive.Decimal128{h:0x303c000000000000, l:0x2742}
- 1 回答
- 0 關(guān)注
- 468 瀏覽
添加回答
舉報