1 回答

TA贡献1829条经验 获得超7个赞
Decimal128.h两者Decimal128.l都是 type uint64,都有 64 位,加起来是 128 位。
| Decimal128.h bits || Decimal128.l bits |
63... ....0 63... ....0
Mongo-go 的实现Decimal128类似于/接近IEEE 754 四精度浮点格式,但有一些细微差别。最高位h是符号位,然后有 2 位被忽略,然后是 14 位指数和 111 位有效数。符号位旁边的后续 5 位是特殊的,如果它们的值为0x1f,则表示该Decimal128值表示 NaN(不是数字),如果它们的值为0x1e,则该值表示正无穷或负无穷大(取决于符号位)。
查看该Decimal128.BigInt()方法的实现以获取详细信息。
如您所见,“单个”低值和高值与表示的浮点数没有直接关系,而是按上述方式处理它们的 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 关注
- 471 浏览
添加回答
举报