如何格式化DOUBLE以在Eiffel中仅打印两位小数?

时间:2010-08-03 02:15:41

标签: printf eiffel

在埃菲尔,你怎么做到这个数字。

118.1999999999999

打印到:

118.20 

在其他语言中只是printf的问题,但似乎没有办法在Eiffel中轻松做到这一点。

2 个答案:

答案 0 :(得分:2)

您应该使用FORMAT_DOUBLE类

local
    fd: FORMAT_DOUBLE
do
    create fd.make (5, 3)
    print (fd.formatted ({REAL_64} 12345.6789)) --> "12345.679"
    print (fd.formatted ({REAL_64} 12345.6)) --> "12345.600"
    print (fd.formatted ({REAL_64} 0.6)) --> "0.600"

    create fd.make (10, 2)
    fd.right_justify
    print (fd.formatted ({REAL_64} 1.678)) --> "      1.68"

    create fd.make (20, 3)
    fd.right_justify
    print ("[" + fd.formatted ({REAL_64} 12345.6789) + "]%N") --> [           12345.679]
    fd.left_justify
    print ("[" + fd.formatted ({REAL_64} 12345.6789) + "]%N") --> [12345.679           ]
    fd.center_justify
    print ("[" + fd.formatted ({REAL_64} 12345.6789) + "]%N") --> [      12345.679     ]

等等......

还有一组模仿“printf”的类,您可以在http://www.amalasoft.com/downloads.htm找到它们 我自己没有使用它们,但这可能会满足您的需求。

这是使用ECMA Eiffel(我不确定前一个响应的来源,但是DOUBLE没有这样的函数`to_string_format'。而且DOUBLE是REAL_64的旧名称

答案 1 :(得分:0)

例如:


class DOBLE

creation
    make

feature
    make is
      local
          n: DOUBLE
          output: STRING
      do
          n := 118.1999999999999
          output := n.to_string_format(2) -- 2 digits in fractionnal part
          std_output.put_string(output + "%N")
      end
end