Pascal中关于writeln()语句的一些疑问?
下面的程序:
PROGRAM ch36;
CONST
s='let us begin';
r=3;
pi=3.14;
BEGIN
writeln(s);
writeln('radium is:',r);
writeln('Area of circle is:',pi*r*r);
writeln('Area of circle is:',pi*r*r:10);
writeln('Area of circle is:',pi*r*r:10:3);
END.
在Free Pascal IDE Version 0.9.2运行结果如下:
■ Free Pascal IDE Version 0.9.2
Running "c:\ch36.exe "
let us begin
radium is:3
Area of circle is: 2.8260000000000000E+0001
Area of circle is: 2.8E+0001
Area of circle is: 28.260
*****************************************************
按照单域宽输出格式的说明writeln(x:n)在n(n为整数)个字符宽的输出域上按右对齐方式输出x的值,若n大于x的实际位数,则在x值前面补(n-x的实际位数)个空格,若x的实际位数大于n,则自动突破限制。
而最后三行的结果,冒号和2之间为什么都有一个空格?仔细观察发现,倒数第二行的结果为什么略去了8后面的26不一样?而且除了刚才提到的空格,倒数第二行的输出结果实际上只占了9位,而不是程序中的十位?若是认为倒数第二行的结果x和倒数第三行那样的结果,它的位数已经突破了10位,应该是自动突破限制,显示的和倒数第三行一样的结果。为什么又不一样呢?
[解决办法]
倒数第二行的输出结果实际上只占了9位,而不是程序中的十位?
10应该是指整数部分吧
[解决办法]
上面理解有误,delphi编译结果为:
let us begin
radium is:3
Area of circle is: 2.82600000000000E+0001
Area of circle is: 2.8E+0001
Area of circle is: 28.260
至于Free Pascal不清楚了。
[解决办法]
我用Delphi XE的命令行编译器22.0和FreePascal 2.4.0的编译器测试了一下,输出结果是:
let us begin
radium is:3
Area of circle is: 2.82600000000000E+0001
Area of circle is: 2.8E+0001
Area of circle is: 28.260
[解决办法]
这个论坛哪~~~ 连续的空格被合并成一个了。
输出结果是:
let us begin
radium is:3
Area of circle is:_2.82600000000000E+0001
Area of circle is:_2.8E+0001
Area of circle is:____28.260
每个下划线代表一个空格
[解决办法]
第三个输出是肯定没有问题的,但是第二个为什么不是2.82E+0001或者2.83E+0001,存疑。第一个输出为什么有一个前导空格也存疑,因为浮点运算不指明类型,默认是双精度的,有15位小数的精度,这个输出有前导空格,却没有给出足够的小数位。
[解决办法]
pascal, so special! ~~~