我刚刚开始学习帕斯卡尔,我必须做一个帕斯卡计划作为家庭作业。 我做了但我不知道如何计算实数中的小数位数(“。”之后的数字位数。)
我只需格式化一个实数(如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的小数位数。
答案 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);
会完成你所追求的目标吗?如果你真的想要计算小数位数,你可能需要转换为字符串,删除任何尾随零,并查看小数点落在哪里。