9.3. decimal64
内置类型
decimal64
内置类型表示实数的子集,可以用十进制数字表示。 decimal64
的值空间是可以通过将64
位有符号整数乘以十的负的幂来获得的数字的集合,即可表示为“i x 10^-n
”,其中i
是整数64
并且n
是整数 1
至18
之间。
9.3.1. 词汇表示
一个decimal64
值从词法上表示为一个可选的符号(“+
”或“-
”),后跟一串十进制数字,可选地后跟一个句号('.
')作为十进制指示符和一串十进制数字。 如果没有指定符号,则假定为“+
”。
9.3.2. 规范形式
正数decimal64
值的规范形式不包含符号“+
”。 小数点是必需的。 前导和尾随零是禁止的,但必须遵守小数点前后至少有一位的规则。 零值表示为“0.0
”。
9.3.3. 限制
可以用“range
”语句来限制decimal64
类型(见第9.2.4节)。
9.3.4. “fraction-digits
”声明
如果类型是“decimal64
”,则必须存在“fraction-digits
”语句,它是“type
”语句的子语句。 它包含1
到18
之间的整数作为参数。 它通过将值空间限制为可表达为“i x 10^-n
”的数字来控制decimal64
类型的值之间的最小差异的大小,其中n
是fraction-digits
参数。
下表列出了每个fraction-digit
值的最小值和最大值:
+----------------+-----------------------+----------------------+
| fraction-digit | min | max |
+----------------+-----------------------+----------------------+
| 1 | -922337203685477580.8 | 922337203685477580.7 |
| 2 | -92233720368547758.08 | 92233720368547758.07 |
| 3 | -9223372036854775.808 | 9223372036854775.807 |
| 4 | -922337203685477.5808 | 922337203685477.5807 |
| 5 | -92233720368547.75808 | 92233720368547.75807 |
| 6 | -9223372036854.775808 | 9223372036854.775807 |
| 7 | -922337203685.4775808 | 922337203685.4775807 |
| 8 | -92233720368.54775808 | 92233720368.54775807 |
| 9 | -9223372036.854775808 | 9223372036.854775807 |
| 10 | -922337203.6854775808 | 922337203.6854775807 |
| 11 | -92233720.36854775808 | 92233720.36854775807 |
| 12 | -9223372.036854775808 | 9223372.036854775807 |
| 13 | -922337.2036854775808 | 922337.2036854775807 |
| 14 | -92233.72036854775808 | 92233.72036854775807 |
| 15 | -9223.372036854775808 | 9223.372036854775807 |
| 16 | -922.3372036854775808 | 922.3372036854775807 |
| 17 | -92.23372036854775808 | 92.23372036854775807 |
| 18 | -9.223372036854775808 | 9.223372036854775807 |
+----------------+-----------------------+----------------------+
9.3.5. 使用示例
typedef my-decimal {
type decimal64 {
fraction-digits 2;
range "1 .. 3.14 | 10 | 20..max";
}
}