9.3. decimal64内置类型

decimal64内置类型表示实数的子集,可以用十进制数字表示。 decimal64的值空间是可以通过将64位有符号整数乘以十的负的幂来获得的数字的集合,即可表示为“i x 10^-n”,其中i是整数64并且n是整数 118之间。

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”语句的子语句。 它包含118之间的整数作为参数。 它通过将值空间限制为可表达为“i x 10^-n”的数字来控制decimal64类型的值之间的最小差异的大小,其中nfraction-digits参数。

下表列出了每个fraction-digit值的最小值和最大值:

  1. +----------------+-----------------------+----------------------+
  2. | fraction-digit | min | max |
  3. +----------------+-----------------------+----------------------+
  4. | 1 | -922337203685477580.8 | 922337203685477580.7 |
  5. | 2 | -92233720368547758.08 | 92233720368547758.07 |
  6. | 3 | -9223372036854775.808 | 9223372036854775.807 |
  7. | 4 | -922337203685477.5808 | 922337203685477.5807 |
  8. | 5 | -92233720368547.75808 | 92233720368547.75807 |
  9. | 6 | -9223372036854.775808 | 9223372036854.775807 |
  10. | 7 | -922337203685.4775808 | 922337203685.4775807 |
  11. | 8 | -92233720368.54775808 | 92233720368.54775807 |
  12. | 9 | -9223372036.854775808 | 9223372036.854775807 |
  13. | 10 | -922337203.6854775808 | 922337203.6854775807 |
  14. | 11 | -92233720.36854775808 | 92233720.36854775807 |
  15. | 12 | -9223372.036854775808 | 9223372.036854775807 |
  16. | 13 | -922337.2036854775808 | 922337.2036854775807 |
  17. | 14 | -92233.72036854775808 | 92233.72036854775807 |
  18. | 15 | -9223.372036854775808 | 9223.372036854775807 |
  19. | 16 | -922.3372036854775808 | 922.3372036854775807 |
  20. | 17 | -92.23372036854775808 | 92.23372036854775807 |
  21. | 18 | -9.223372036854775808 | 9.223372036854775807 |
  22. +----------------+-----------------------+----------------------+

9.3.5. 使用示例

  1. typedef my-decimal {
  2. type decimal64 {
  3. fraction-digits 2;
  4. range "1 .. 3.14 | 10 | 20..max";
  5. }
  6. }