Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Decimal 用帕斯卡计算小数位数_Decimal_Pascal_Real Datatype - Fatal编程技术网

Decimal 用帕斯卡计算小数位数

Decimal 用帕斯卡计算小数位数,decimal,pascal,real-datatype,Decimal,Pascal,Real Datatype,我刚开始学习pascal,我必须做一个pascal程序作为家庭作业。 我做到了,但我不知道如何计算实数的小数位数 我需要它来格式化一个实数(比如write(real:0:dec)其中dec是我不知道如何知道的十进制数字)。我想这样做,因为我不希望它用科学记数法,或者有很多不必要的零 例如,如果一个实数是1.51(x),我写的是writeln(x:0:4);或WriteLn(格式('%*.*f',[0,4,x]);它将显示1.5100,但我希望它只是1.51;如果数字像1.513436,它将只显示

我刚开始学习pascal,我必须做一个pascal程序作为家庭作业。 我做到了,但我不知道如何计算实数的小数位数

我需要它来格式化一个实数(比如
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的十进制数字的东西。

在这种情况下通常使用
Format()
函数

WriteLn(Format('%*.*f', [0, dec, your_real_number]));
*.
被解释为
总字符数。十进制数字
。第一次通过零意味着宽度是根据实际的大小来调整的。小数位数可以是一个变量(dec),您可以根据自己的规格进行调整


更新:

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

正如我在评论中提到的,大多数浮点值的小数位数不是有限的。大多数小数不能用二进制类型表示

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


尽管如此,仍然可以使用通用格式说明符删除尾随的零:

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

您还可以指定宽度和有效位数。

如果您实际执行的是writeln()输出,那么
writeln(x)

能完成你的目标吗?如果你真的想计算小数的数量,你可能必须转换成一个字符串,去掉任何尾随的零,看看小数点在哪里。

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

从您的另一个示例中,如果您的输入是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”数字


希望这能有所帮助,我只是想从另一个角度回答。

谢谢,但我仍然不明白如何格式化一个只显示所需数字的数字。例如,如果一个实数是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.1。有关浮点值的pascal摘要,请参阅本博客。这里还有一个链接,.Format()不是pascal,而是特定于Delphi和compatibles的。@MarcovandeVoort,好的。我以为这是免费的Pascal,也许这是错的。Delphi和FPC加在一起是现在Pascal的主要部分。但它们有自己的(一套)标签。请帮助保持[pascal]的纯净。您添加了通用的“pascal”标记。请提及Pascal的编译器/方言。
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.