Ada: Fraction part of Float/Fixed as Integer

佐手、 提交于 2019-12-02 21:37:09

问题


In Ada, I would like to separate out a number like 12.345 out into two distinct integers:

whole : integer := 12;
fraction : integer := 345;

The Whole part is easy, but I don't know how to get the Fraction part.

My starting idea is:

12.345 mod Integer(12.345)

which will return 0.345, and could be multiplied by the inverse magnitude (in this case ×1000), but I don't know how to count the amount of digits either.


回答1:


Not a full Answer but this gets the fractional part as a string to enable further manipulation to retreive it as an integer:

with Ada.Text_Io;

procedure Remainder is 
   package Fio is new Ada.Text_IO.Float_IO(Float);

   X : constant Float := 12.345;
   X_Int : constant Integer := Integer (X);
   X_Rem : constant Float := Float'Remainder(X,Float (X_Int));

begin
   Fio.Put (X_Rem, Aft => 6, Exp => 0);

end Remainder;



回答2:


In NWS suggestion, use
X_Int : constant Integer := Integer(Float'Truncation(X));
instead of
X_Int : constant Integer := Integer (X);

Otherwise, the whole part of the float may be rounded up (e.g. if X = 12.99, X_Int will be 13).



来源:https://stackoverflow.com/questions/28928937/ada-fraction-part-of-float-fixed-as-integer

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!