例如:
X:float:= 12.34;
如何获得' 34'没有使用循环?
答案 0 :(得分:0)
以下函数显示了获取它的一种方法。它首先减去数字的整数部分。这个积分部分实际上可以向上向上而不是向下,因此,如果减法产生的数字小于零,则需要通过添加一个来调整。
function FloatBit (X1: float) return float is
X2: float;
begin
X2 := X1 - Float(Integer(X1));
if (X2 < 0.0) then X2 := X2 + 1.0; end if;
return X2;
end FloatBit;
返回您可以查看的浮点部分:
Put_Line(Float'Image(FloatBit(12.34)));
如果你想将它转换为一个整数(比如两位小数),你可以简单地将它乘以一百然后再取整数部分,如:
function FloatBitAsInt (X1: float; mult: integer) return integer is
begin
return Integer(FloatBit(X1) * Float(mult));
end FloatBitAsInt;
并查看:
Put_Line(Integer'Image(FloatBitAsInt(12.34, 100)));
对于任意小数位数,我不确定你是否可以在没有循环的情况下执行此操作,因为我不想要Ada,因为aspseudo-code回到我的快速访问存储中: - )
while float(integer(x)) is different from x:
multiply x by ten
但请记住,浮点不是一种精确的存储方法。大多数数字足够接近但不准确。因此,这种方法最终可能会将0.1
之类的数字转换为100000001490116119384765625
,我非常怀疑这是你想要的。