.
の後に可変桁数の10進値があります。例:
0.0030
0.0310
0.0001
1.1200
小数点以下0を削除する動的関数を作成するにはどうすればよいですか?
string.Format("{0:0.#####}", 0.0030)
または
var money=1.3000m;
money.ToString("0.#####");
今後の参考のために、John Sheehanによる 。NET Format String Quick Reference をお勧めします。
ToString()が必要なものを提供するように、小数自体を変更することもできます(詳細は私の回答 ここ ):
public static decimal Normalize(decimal value)
{
return value/1.000000000000000000000000000000000m;
}
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
うーん、これは表示フォーマットの問題です(10進数を文字列に変換するとゼロが追加されます)。
コードのどこに後続ゼロが表示されているかを確認する必要があります。 .ToString()を呼び出した後ですか?さまざまなフォーマット文字列を試してみてください。
.ToString("#");
.ToString("0.00");
.ToString("#.##");
等々。これを行う最良の方法は、さまざまな可能な値を試すことです。
decimal m = 0.030000m;
Console.Write(m.ToString("0.##########"));
表示する小数点以下の桁数に十分な数があることを確認してください
私は以下を使用します。これにより、小数点以下(最大精度は小数点以下29桁)で、末尾のゼロがなく、コードに長い醜いハッシュマークの文字列が必要なく、使用可能なすべての精度の桁が表示されます。
if (value is Decimal)
value = ((Decimal)value).ToString("0.".PadRight(29, '#'), culture);