すべての値を小数点以下第2位に四捨五入する必要があります。したがって、1.401は1.40に丸める必要がありますがMath.Round(value, 2)
、1.4に丸めます。
末尾のゼロを強制するにはどうすればよいですか?
1.4
と同じ1.40
です-あなたはそれを異なって表示したいだけです。呼び出すときにフォーマット文字列を使用するToString
-likevalue.ToString("0.00")
1.4 == 1.40
末尾の0が必要になるのは、数値を表示するときだけです。つまり、文字列にフォーマットします。
.ToString("N2");
末尾のゼロは、値の問題というよりもフォーマットであるため、次を使用します。
foo.ToString("0.00")
これは古い質問ですが、誰かを助けるかもしれません!
ac#xmlクラスを使用してデータを入力し、xmlにシリアル化します。値の1つはdoubleです。値に「7」を割り当てると、実際に「7.00」が必要になったときに、これは「7」にシリアル化されます。これを回避する最も簡単な方法は、次のことです。
foo = doubleValue + 0.00M
これにより、値は7ではなく7.00になります。これは、ToStringを実行してから、解析して戻すよりも優れていると考えました。
末尾のゼロは単なるプレゼンテーションです。数学的には、1.40
と1.4
同等です。
代わりにフォーマットを使用して、小数点以下2桁で表示します。
String.Format("{0:0.00}", 1.4);
or
yourNumber.ToString("0.00");
これは、小数を使用するか倍精度を使用するかと関係があります。
内部的に(ソースコードからわかるように)Math.Round()
、doubleでも末尾のゼロが保持されますが、それでもメモリにdoubleとして保存されるという事実により、末尾のゼロはすべて自動的に削除されます。
したがって、末尾のゼロが必要な場合は、文字列表示関数を使用して他の人が回答したとおりにフォーマットするか、元の値を小数として渡すようにしてください(内部Decimal.Math.Round
で使用すると、小数のみが処理されます)。結果をdoubleにキャストしたり、double変数に保存したりしないように注意してください。
同様に、小数があり、末尾のゼロが必要ない場合は、それをdoubleにキャストします(入力Math.Round
または結果のいずれかをキャストできます。それがdoubleになる方法のどこかにある限り、問題ではありません。 )。
これは数値(double?)であるため、末尾のゼロはありません。テキストにして末尾のゼロを強制する必要があります。
ラウンド関数の代わりにこの関数を使用して、ラウンド関数を使用するのと同じように使用できます。
import decimal
def printf(x, n):
d = decimal.Decimal(str(x))
d0 = -(d.as_tuple().exponent)
if d0 < n:
print("x = ", x)
else:
d1 = decimal.Decimal(str(round(x, n)))
d2 = d1.as_tuple().exponent
MAX = n + d2
if MAX == 0:
print("x = ", round(x, n))
else:
i = 0
print("x = ", round(x, n), end = '')
while i != MAX:
if i == (MAX - 1):
print("0")
else:
print("0", end = '')
i = i + 1
だからあなたはこのようなものを持っている必要があります。
>>> printf(0.500000000000001, 13)
>>> 0.5000000000000