我正在使用github.com/shopspring/decimal进行货币操作(精确数字)什么是最好的方法来编组一个十进制数。十进制数和反编组并获得相同的值?是一种转换十进制数的方法。十进制数转换成字符串?谢谢。
py49o6xq1#
decimal.Decimal实现json.Marshaler接口和json.Unmarshaler接口,json.Marshal()调用其MarshalJSON方法生成JSON;而json.Unmarshal()调用其UnmarshalJSON方法来解析JSON编码的数据。因此,您不需要显式地执行此操作。
decimal.Decimal
json.Marshaler
json.Unmarshaler
json.Marshal()
MarshalJSON
json.Unmarshal()
UnmarshalJSON
vatpfxk52#
decimal.Decimal实现了Stringer接口。因此,要将 * 转换为 * 字符串,其中d是decimal.Decimal:
Stringer
d
s := d.String()
要从字符串中获取decimal.Decimal *,请使用decimal.NewFromString():
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将根据需要从(正确编码的)string或number值中解组。
string
decimal.MarshalJSONWithoutQuotes
true
number
2条答案
按热度按时间py49o6xq1#
decimal.Decimal
实现json.Marshaler
接口和json.Unmarshaler
接口,json.Marshal()
调用其MarshalJSON
方法生成JSON;而json.Unmarshal()
调用其UnmarshalJSON
方法来解析JSON编码的数据。因此,您不需要显式地执行此操作。vatpfxk52#
decimal.Decimal
实现了Stringer
接口。因此,要将 * 转换为 * 字符串,其中
d
是decimal.Decimal
:要从字符串中获取
decimal.Decimal
*,请使用decimal.NewFromString()
:还请注意,
decimal.Decimal
默认情况下将作为string
(即双引号表示)编组到JSON。Un 编组自动支持引号(字符串)或非引号(数字)值。如果需要,可以通过将
decimal.MarshalJSONWithoutQuotes
设置为true
来控制编组行为,例如,如果与需要/期望JSON有效载荷中的数字值的API交互。这里有两件事需要注意:
1.此设置会影响 * 所有 *
decimal.Decimal
值的封送。似乎无法选择性地在逐案基础上使用/不使用引号封送1.没有引号的封送可能会导致精确度的无声损失
不需要“控制”un 编组行为。
decimal.Decimal
将根据需要从(正确编码的)string
或number
值中解组。number
不会导致精度损失(除了原始marshalling to 该数值导致的任何损失)。