2

C# コンソール アプリケーション。次のコードがあります。

next = 758550
next = (double)next / Math.Pow(10, 6);
file.WriteLine(next);

double に指定したにもかかわらず、0.758550 を返す代わりに 0.75855 を返します (最後にゼロはありません)。

4

2 に答える 2

7

はい、double末尾のゼロは保持されません。これは、正確な10進数ではなく、値の大きさに関するタイプであることを意味します。

ただし、末尾のゼロdecimal は保持されるため、次のように記述します。

decimal next = 758550m;
next = next * 0.000001m;
file.WriteLine(next);

...それはあなたが望むものをあなたに示すでしょう。興味深いことに、1000000で割ってもここでは機能しません。アルゴリズムは「どちらかのオペランドと同じ数の重要でない10進数を保持する」という方針に沿ったものだと思いますが、完全には明確ではありません。

doubleまたは、代わりに値のカスタム形式を指定することもできます。

file.WriteLine(next.ToString("0.000000"));

また:

file.WriteLine("{0:0.000000}", next);

どのタイプが自分に最も適しているかを実際に判断する必要があります。経験則として、「人工」値(特に通貨)は、として最も適切に表されdecimalます。距離、重みなどの「自然な」値は、として最も適切に表されdoubleます。

于 2013-03-14T10:45:00.833 に答える
2

0.758550とに違いがないため0.75855、最後0は重要ではありません。最後のゼロを取得するためのフォーマットを指定します。

string strForDisplay = next.ToString("0.0000000");

上記はあなたに最後を与えるでしょう0

于 2013-03-14T10:44:17.010 に答える