然而,在这些艰难时期,我们现在拥有价值高达18位小数的货币(谢谢ETH)。
现在重新提出经典论点。
IDEAS
选项1 BIGINT
使用大整数来保存实际值,然后存储货币所包含的小数位数(只需将A
除以10^B
在翻译)?
选项2 Decimal(60,30)
将数据类型存储为大小数,这不可避免地会占用大量空间。
选项3 VARCHAR(64)
存储在字符串中。哪会对性能产生影响。
我想了解人们的想法以及他们在处理加密货币价值时所使用的内容。因为我被最好的方法所困扰。
答案 0 :(得分:9)
你建议的三个中有一个明确的最佳选择(加上评论中的一个)。
BIGINT - 仅使用8个字节,但最大BIGINT
只有19个十进制数字;如果除以10 18 ,则可以表示的最大值为9.22,这是不够的范围。
DOUBLE - 只有15-17个十进制数字的精度;具有浮点运算的所有已知缺点。
VARCHAR - 如果您处理18位小数,则将使用20+个字节;将需要不断的string↔int转换;无法分类;无法比较;无法在DB中添加;许多缺点。
DECIMAL(27,18) - 如果使用MySQL,则需要12个字节(4 for each group of 9 digits)。这是一个非常合理的存储大小,并且有足够的范围来支持大到10亿或小到一个Wei的数量。它可以在数据库中进行排序,比较,添加,减去等,而不会损失精度。
如果你需要存储真正巨大的价值,我会使用DECIMAL(27,18)
(或DECIMAL(36,18)
来存储加密货币的价值。