Как отформатировать DOUBLE для печати только двух знаков после запятой в Eiffel?

В эйфеле как сделать так чтобы число.

118.1999999999999

печатает в:

118.20 

На другом языке это просто вопрос printf, но, похоже, в Eiffel нет простого способа сделать это.


person elviejo79    schedule 03.08.2010    source источник


Ответы (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

person Jocelyn    schedule 02.07.2012

Например:


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
person Marcos    schedule 18.09.2010
comment
:-( кажется, не существует в INTEGER - person Pipo; 17.02.2020