エッフェルではどうやってその数を作るのですか?
118.1999999999999
印刷先:
118.20
他の言語では単純に printf の問題ですが、Eiffel で簡単にそれを行う方法はないようです。
クラス 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 の古い名前です)
例えば:
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