编组十进制,golang中的十进制

0md85ypi  于 2023-04-18  发布在  Go
关注(0)|答案(2)|浏览(149)

我正在使用github.com/shopspring/decimal进行货币操作(精确数字)
什么是最好的方法来编组一个十进制数。十进制数和反编组并获得相同的值?
是一种转换十进制数的方法。十进制数转换成字符串?
谢谢。

py49o6xq

py49o6xq1#

decimal.Decimal实现json.Marshaler接口和json.Unmarshaler接口,json.Marshal()调用其MarshalJSON方法生成JSON;而json.Unmarshal()调用其UnmarshalJSON方法来解析JSON编码的数据。因此,您不需要显式地执行此操作。

vatpfxk5

vatpfxk52#

decimal.Decimal实现了Stringer接口。
因此,要将 * 转换为 * 字符串,其中ddecimal.Decimal

s := d.String()

要从字符串中获取decimal.Decimal *,请使用decimal.NewFromString()

d, err := decimal.NewFromString(s)
if err != nil {
    // handle err
}

还请注意,decimal.Decimal默认情况下将作为string(即双引号表示)编组到JSON。Un 编组自动支持引号(字符串)或非引号(数字)值。
如果需要,可以通过将decimal.MarshalJSONWithoutQuotes设置为true来控制编组行为,例如,如果与需要/期望JSON有效载荷中的数字值的API交互。
这里有两件事需要注意:
1.此设置会影响 * 所有 * decimal.Decimal值的封送。似乎无法选择性地在逐案基础上使用/不使用引号封送
1.没有引号的封送可能会导致精确度的无声损失
不需要“控制”un 编组行为。decimal.Decimal将根据需要从(正确编码的)stringnumber值中解组。

  • unmarshalling* a number不会导致精度损失(除了原始marshalling to 该数值导致的任何损失)。

相关问题