web-dev-qa-db-ja.com

10進値の末尾から0を削除します

.の後に可変桁数の10進値があります。例:

0.0030
0.0310
0.0001
1.1200

小数点以下0を削除する動的関数を作成するにはどうすればよいですか?

15
Fifty
string.Format("{0:0.#####}", 0.0030)

または

var money=1.3000m;
money.ToString("0.#####");

今後の参考のために、John Sheehanによる 。NET Format String Quick Reference をお勧めします。

20
Jonas Elfström

ToString()が必要なものを提供するように、小数自体を変更することもできます(詳細は私の回答 ここ ):

public static decimal Normalize(decimal value)
{
    return value/1.000000000000000000000000000000000m;
}
28
Thomas Materna
decimal value = 0.0030m;
value.ToString(“G29″);

編集:Gフォーマッターは機能しますが、唯一の問題は、元の小数に有効数字が多すぎると科学的記数法にジャンプすることです。あまり理想的ではありません。

ここの「一般( "G")フォーマット指定子」のドキュメントを参照してください: http://msdn.Microsoft.com/en-us/library/dwhawy9k.aspx#GFormatString

私は昼食をとっているので、少しテストをしました:

decimal d1 = 0.000100m;
decimal d2 = 0.001000000000000000000000m;
decimal d3 = 0.000000000000001000000000m;

Console.WriteLine(Environment.NewLine + "input decimal: 0.000100m");
Console.WriteLine("G         " + d1.ToString("G"));
Console.WriteLine("G29       " + d1.ToString("G29"));
Console.WriteLine("0.####### " + d1.ToString("0.#######"));

Console.WriteLine(Environment.NewLine + "input decimal: 0.001000000000000000000000m");
Console.WriteLine("G         " + d2.ToString("G"));
Console.WriteLine("G29       " + d2.ToString("G29"));
Console.WriteLine("0.####### " + d2.ToString("0.#######"));

Console.WriteLine(Environment.NewLine + "input decimal: 0.000000000000001000000000m");
Console.WriteLine("G         " + d3.ToString("G"));
Console.WriteLine("G29       " + d3.ToString("G29"));
Console.WriteLine("0.####### " + d3.ToString("0.#######"));

出力:

input decimal: 0.000100m
G         0.000100
G29       0.0001
0.####### 0.0001

input decimal: 0.001000000000000000000000m
G         0.001000000000000000000000
G29       0.001
0.####### 0.001

input decimal: 0.000000000000001000000000m
G         0.000000000000001000000000
G29       1E-15
0.####### 0
9
Andrew M

うーん、これは表示フォーマットの問題です(10進数を文字列に変換するとゼロが追加されます)。

コードのどこに後続ゼロが表示されているかを確認する必要があります。 .ToString()を呼び出した後ですか?さまざまなフォーマット文字列を試してみてください。

.ToString("#");
.ToString("0.00");
.ToString("#.##");

等々。これを行う最良の方法は、さまざまな可能な値を試すことです。

3
Gabriel Magana
decimal m = 0.030000m;
Console.Write(m.ToString("0.##########"));

表示する小数点以下の桁数に十分な数があることを確認してください

2
Martin Booth

私は以下を使用します。これにより、小数点以下(最大精度は小数点以下29桁)で、末尾のゼロがなく、コードに長い醜いハッシュマークの文字列が必要なく、使用可能なすべての精度の桁が表示されます。

if (value is Decimal)
   value = ((Decimal)value).ToString("0.".PadRight(29, '#'), culture);
0
Alain