6.7.4.1 Basic Numeric Formats
基本数值格式用于标准记数法或科学记数法中实数的输入与输出。下表举例说明了每种格式在默认小数点设置下如何显示正数和负数:
| Format | 3141.59 | -3141.59 |
|---|---|---|
| F8.2 | 3141.59 | -3141.59 |
| COMMA9.2 | 3,141.59 | -3,141.59 |
| DOT9.2 | 3.141,59 | -3.141,59 |
| DOLLAR10.2 | $3,141.59 | -$3,141.59 |
| PCT9.2 | 3141.59% | -3141.59% |
| E8.1 | 3.1E+003 | -3.1E+003 |
输出时,F 格式的数字以标准十进制记数法表示,并带有指定的小数位数。其他格式在此样式基础上有所变化:
- COMMA 格式的数字还会每三位插入一个分组字符进行分组。分组字符通常为逗号,但可改为句点(参见 SET DECIMAL)。
- DOT 格式与 COMMA 格式类似,但小数点和分组字符的作用互换,即当前的分组字符用作小数点,反之亦然。
- DOLLAR 格式与 COMMA 格式类似,但会在数字前加 ‘$’ 前缀。
- PCT 格式与 F 格式类似,但会在数字后加 ‘%’。
- E 格式的输出始终采用科学记数法。
输入时,基本数值格式接受标准十进制记数法或科学记数法中的正数与负数。允许前导和尾部空格。空字段或全为空格的字段,或仅含单个句点的字段,被视为系统缺失值。
在科学记数法中,指数可由符号(‘+’ 或 ‘-’)引入,也可由字母 ‘e’ 或 ‘d’(大小写均可)引入,或由字母后接符号引入。字母或符号之后,或二者之后,可跟一个空格。
在固定格式的 DATA LIST(参见 DATA LIST FIXED)以及少数其他场合中,当字段不含小数点时,小数位为隐含。例如在 F6.5 格式中,字段 314159 被视为值 3.14159,小数位为隐含。若存在显式小数点或使用了科学记数法,则小数位绝不隐含。
E 和 F 格式接受上述基本语法。其他格式还允许一些额外变化:
- COMMA、DOLLAR 和 DOT 格式会忽略输入字段整数部分中的分组字符。分组字符的具体形式取决于格式。
- DOLLAR 格式允许数字前出现美元符号。在负数中,美元符号可在负号之前或之后。
- PCT 格式允许数字后出现百分号。
所有基本数值格式在输入和输出时最大字段宽度均为 40,且小数位数不超过 16。还有一些附加限制:
- 作为输入格式时,基本数值格式的小数位数不得多于字段宽度。作为输出格式时,字段宽度必须大于小数位数,即要足够容纳一个小数点和所要求的小数位数。DOLLAR 和 PCT 格式还必须为 ‘$’ 或 ‘%’ 额外预留一列。
- 给定输入格式的默认输出格式会将字段宽度增加到足以容纳可选的输入字符。如果输入格式要求有小数位,宽度增加 1 以留出隐含小数点的空间。COMMA、DOT 和 DOLLAR 格式还会增加输出宽度以留出分组字符的空间。DOLLAR 和 PCT 会再将输出字段宽度增加 1,以留出 ‘$’ 或 ‘%’ 的空间。增加后的输出宽度上限为最大字段宽度 40。
- E 格式是个例外。输出时,E 格式的最小宽度为 7 加上小数位数。E 输入格式的默认输出格式为至少 3 位小数的 E 格式,因此最小宽度为 10。
基本数值输出的更多格式细节如下:
- 输出按最接近的值舍入,平局时向远离零的方向舍入。因此在 F1.0 格式中,2.5 输出为
3;在 F5.1 格式中,-1.125 输出为-1.13。 - 系统缺失值输出为一个句点,位于空格字段中,放在小数点所在位置;若未要求小数位,则放在最右列。即使小数点字符是逗号,也使用句点。
- 未填满字段的数字在字段内右对齐。
- 数字过大而无法放入字段时,会舍弃小数位以腾出空间。如果舍弃小数位仍不足以容纳,且字段足够宽,则采用科学记数法。如果数字即使使用科学记数法也无法放入字段,则溢出通过在字段中填满星号(‘*’)来表示。
- COMMA、DOT 和 DOLLAR 格式仅在能为所有分组字符腾出空间时才插入分组字符。当需要舍弃所有小数位时,绝不插入分组字符。因此在 COMMA5.2 格式中,1234.56 输出为不带逗号的 ‘ 1235’,尽管有空间放一个逗号,但因为所有小数位都被舍弃了。
- DOLLAR 或 PCT 格式仅在缺少 ‘$’ 或 ‘%’ 时数字完全无法容纳的情况下才舍弃它们。带有 ‘$’ 或 ‘%’ 的科学记数法优先于不带它们的普通十进制记数法。
- 除科学记数法外,仅当小数点后面跟有数字时才包含小数点。如果输出数字的整数部分为 0 且包含小数点,PSPP 通常会去掉小数点前的 0。但在
F、COMMA或DOT格式中,若SET LEADZERO设为ON,PSPP 会保留该 0(参见 SET LEADZERO)。
在科学记数法中,数字始终包含小数点,即使其后没有数字。
- 负数仅在存在非零数字时才包含负号:-0.01 在 F4.2 格式中输出为 ‘-.01’,在 F4.1 格式中输出为 ‘ .0’。因此,“负零”永远不会包含负号。
- 以 DOLLAR 格式输出的负数中,美元符号位于负号之后。因此在 DOLLAR6.2 格式中,-9.99 输出为
-$9.99。 - 在科学记数法中,指数输出为 ‘E’ 后接 ‘+’ 或 ‘-’ 以及恰好三位数字。绝大多数计算机不支持绝对值小于 10**-999 或大于 10**999 的数字,但若支持,则其输出被视为溢出字段,并以星号输出。
- 在大多数计算机上,输出中有意义的十进制数字不超过 15 位,即使打印出更多位。无论如何,输出精度不可能高于输入精度;很少有数据集能达到 15 位精度。中间计算中不可避免的精度损失也可能降低输出精度。
- 诸如无穷大和“非数字”之类的特殊值,通常在打印前会被转换为系统缺失值。在少数情况下,这些值会直接输出。在宽度为 3 或更大的字段中,特殊值输出为可容纳的字符:无穷大输出
+Infinity或-Infinity,“非数字”(not a number)输出NaN,其他值(若系统支持)输出Unknown。在宽度小于 3 列的字段中,特殊值输出为星号。