在prolog中截断浮点数

在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中,如何将浮点数截断到小数点后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 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
来简化代码。