C# コンソール アプリケーション。次のコードがあります。
next = 758550
next = (double)next / Math.Pow(10, 6);
file.WriteLine(next);
double に指定したにもかかわらず、0.758550 を返す代わりに 0.75855 を返します (最後にゼロはありません)。
C# コンソール アプリケーション。次のコードがあります。
next = 758550
next = (double)next / Math.Pow(10, 6);
file.WriteLine(next);
double に指定したにもかかわらず、0.758550 を返す代わりに 0.75855 を返します (最後にゼロはありません)。
はい、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
ます。
0.758550
とに違いがないため0.75855
、最後0
は重要ではありません。最後のゼロを取得するためのフォーマットを指定します。
string strForDisplay = next.ToString("0.0000000");
上記はあなたに最後を与えるでしょう0