计算pascal中的小数位数

时间:2013-05-14 18:37:38

标签: decimal pascal real-datatype

我刚刚开始学习帕斯卡尔,我必须做一个帕斯卡计划作为家庭作业。 我做了但我不知道如何计算实数中的小数位数(“。”之后的数字位数。)

我只需格式化一个实数(如write(real:0:dec),其中dec是我不知道如何知道的十进制数字)。我想这样做是因为我不想用科学记法或许多不必要的零。

例如,如果实数是1.51(x)并且我写了writeln(x:0:4);或WriteLn(格式('%*。* f',[0,4,x]));它将显示1.5100,但我希望它只是1.51;如果数字如1.513436,则只显示1.5134。所以我会把它变成writeln(x:0:dec);用dec使得x的小数位数。

3 个答案:

答案 0 :(得分:2)

Format()函数通常用于这种情况。

WriteLn(Format('%*.*f', [0, dec, your_real_number]));

*.*被解释为total_characters.decimal_digits。第一个传递零意味着根据您的实际大小调整宽度。小数位数可以是变量(dec),您可以根据规格进行调整。


更新

你提到你想要一个关于小数位数的浮点的精确表示。

正如我的评论中所提到的,大多数浮点值没有有限的小数位数。并且大多数小数部分不能用二进制类型表示。

有些库可以处理任意大小的浮点值。例如,请参阅TBigFloat。有一个格式化例程可以从十进制浮点数中删除多余的零。


但是,仍然可以使用通用格式说明符删除尾随零:

WriteLn(Format('%g',[your_real_number]));

您也可以指定有效位数的宽度和数量。

答案 1 :(得分:1)

例如,如果您在实变量类型中输入x = 1.51,那么您只写writeln(x),输出将为1.5100000000。如果你写writeln(x:0:3),输出将是1.510(“。”之后的3位数)......

var x: real;
Begin
x:=1.51;
writeln(x); //output 1.5100000000
writeln(x:0:4); //output 1.5100 (4 digits after ".")
writeln(x:0:2); //output 1.51 (2 digits after ".")
readln;
End.

在另一个示例中,如果您的输入为1.512426,而writeln(x:0:5)则只会在“。”之后显示5位数。输出将为1.51242

var x: real;
Begin
x:=1.512426;
writeln(x); //output 1.5124260000
writeln(x:0:4); //output 1.5124 (4 digits after ".")
writeln(x:0:2); //output 1.51 (2 digits after ".")
readln;
End. 

因此,如果你写writeln(x:0:dec),输出将是“。”之后的“dec”数字。

希望这有帮助,我只想从不同的角度回答。

答案 2 :(得分:0)

如果你实际上正在做一个writeln()输出,肯定只是     writeln(x); 会完成你所追求的目标吗?如果你真的想要计算小数位数,你可能需要转换为字符串,删除任何尾随零,并查看小数点落在哪里。