我想将浮点值转换为字符串并创建以下简短示例:
with Ada.Text_IO;
procedure Example is
A : constant Float := -1.234;
B : constant Float := 123_456.789;
C : constant Float := 987.654_321;
package Float_IO is new Ada.Text_IO.Float_IO (Num => Float);
String_Float_A : String := " ";
String_Float_B : String := " ";
String_Float_C : String := " ";
begin
Ada.Text_IO.Put_Line (Float'Image (A));
Ada.Text_IO.Put_Line (Float'Image (B));
Ada.Text_IO.Put_Line (Float'Image (C));
Float_IO.Put
(To => String_Float_A,
Item => A,
Aft => 2,
Exp => 0);
Float_IO.Put
(To => String_Float_B,
Item => B,
Aft => 2,
Exp => 0);
Float_IO.Put
(To => String_Float_C,
Item => C,
Aft => 2,
Exp => 0);
Ada.Text_IO.Put_Line (String_Float_A);
Ada.Text_IO.Put_Line (String_Float_B);
Ada.Text_IO.Put_Line (String_Float_C);
end Example;
我的问题:我需要在调用过程之前创建字符串变量Put
有足够的长度。如何在运行时动态完成此操作?基本上我需要计算出点之前的位数。那么足够的字符串长度将是:1 (sign) + Number_Of_Dots + 1 (decimal separator) + Aft
.
小数点前的位数可以通过计算 1 加上常用对数(以 10 为底)的整数部分来计算
数字的整数部分。
In Ada:
N := Integer (Float'Floor (Log (Float'Floor (abs X), 10.0))) + 1;
您的程序必须与 Ada.Numerics.Elementary_Functions 一起使用。
如果数字为负数,则必须为减号添加空格。
如果整数部分为0,则该公式不起作用,但此时N显然为1。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)