在以太坊智能合约开发中,Solidity 语言为我们提供了多种数据类型来处理不同范围和精度的数值。fixed 类型系列,即固定点数类型,是一个相对不那么为人熟知但功能强大的工具,本文将深入探讨以太坊(更准确地说是 Solidity)中的 fixed 类型,揭示其工作原理、应用场景以及开发者在使用时需要注意的事项。
什么是 fixed 类型
fixed 类型是 Solidity 中用于表示有理数(即可以表示为两个整数之比的数)的一种数值类型,与计算机中常用的浮点数(float 和 double)不同,fixed 类型采用固定小数位数的方式存储数值,这意味着其小数部分的位数是预先定义且固定的。
fixed 类型的一般形式为 fixedMxN,
M表示总共使用的位数(bit width),可以是8到256之间的 8 的倍数(即8, 16, 24, ..., 256)。N表示小数部分的位数(number of fractional digits),可以是0到M之间的整数。
fixed128x18:表示总共使用 128 位,18 位是小数部分,110 位是整数部分(128 - 18)。fixed64x32:表示总共使用 64 位,32 位是小数部分,32 位是整数部分。fixed:这是fixed128x18的别名,是fixed类型中最常用的,类似于int是int256的别名。
fixed 类型的核心特性
-
固定精度:这是
fixed类型最核心的特性,一旦选择了M和N,数值的精度就确定了,这对于需要精确计算的场景至关重要,避免了浮点数运算中常见的精度误差累积问题,在金融计算中,0.01 美元的误差可能是不可接受的。 -
确定性:由于精度固定,
fixed类型的运算结果是确定性的,这在区块链这种强调确定性和一致性的环境中尤为重要,浮点数运算由于 IEEE 754 标准的实现细节和硬件差异,可能会在不同环境下产生微小差异,这在智能合约中是危险的。 -
