2

エッフェルではどうやってその数を作るのですか?

118.1999999999999

印刷先:

118.20 

他の言語では単純に printf の問題ですが、Eiffel で簡単にそれを行う方法はないようです。

4

2 に答える 2

3

クラス 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 の古い名前です)

于 2012-07-02T09:21:00.493 に答える
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
于 2010-09-18T23:41:41.753 に答える