在prolog中截断浮点数
在Prolog中,如何将浮点数截断到小数点后N位在prolog中截断浮点数,prolog,yap,Prolog,Yap,在Prolog中,如何将浮点数截断到小数点后N位 有什么内置的工具吗?实际上,在Prolog中定义谓词truncate/3很容易。假设我们想要截断一个实数X至N小数位,并将其结果存储在result中。使用中截断的数学函数,我们可以如下定义谓词: % truncation for positive numbers truncate(X,N,Result):- X >= 0, Result is floor(10^N*X)/10^N, !. % truncation
有什么内置的工具吗?实际上,在Prolog中定义谓词
truncate/3
很容易。假设我们想要截断一个实数X
至N
小数位,并将其结果存储在result
中。使用中截断的数学函数,我们可以如下定义谓词:
% truncation for positive numbers
truncate(X,N,Result):- X >= 0, Result is floor(10^N*X)/10^N, !.
% truncation for negative numbers
truncate(X,N,Result):- X <0, Result is ceil(10^N*X)/10^N, !.
%正数的截断
截断(X,N,结果):-X>=0,结果是地板(10^N*X)/10^N!。
%负数截断
截断(X,N,Result):-X刚刚得到。使用格式/ 2将做它。考虑回答和关闭你自己的问题谢谢答案!但我想知道为什么这么简单的事情没有内置谓词。虽然format/2谓词可以工作,但我后来意识到,使用format/2,我们无法将输出保存在任何变量中,输出将直接进入流。因为最初Prolog不用于数值计算。在过程语言中,它可能看起来很简单,但在Prolog中,我们必须适应声明式(特别是逻辑)编程范式。您应该总是在X>=0
测试之后尽快进行剪切。最后一个子句中的剪切是不必要的。您还可以通过使用内置的truncate
函数而不是floor
和ceil
来简化代码。