これはおそらくばかげていますが、それは私に苦労を与えています。必須の小数点double
を使用してに変換/フォーマットする必要があります。string
1 => 1.0
0.2423423 => 0.2423423
0.1 => 0.1
1234 => 1234.0
基本的に、すべての小数を出力したいのですが、丸められた値にも冗長性があることを確認し.0
ます。これを達成する簡単な方法があると確信しています。
これはおそらくばかげていますが、それは私に苦労を与えています。必須の小数点double
を使用してに変換/フォーマットする必要があります。string
1 => 1.0
0.2423423 => 0.2423423
0.1 => 0.1
1234 => 1234.0
基本的に、すべての小数を出力したいのですが、丸められた値にも冗長性があることを確認し.0
ます。これを達成する簡単な方法があると確信しています。
使用double.ToString("N1")
:
double d1 = 1d;
double d2 = 0.2423423d;
double d3 = 0.1d;
double d4 = 1234d;
Console.WriteLine(d1.ToString("N1"));
Console.WriteLine(d2.ToString("N1"));
Console.WriteLine(d3.ToString("N1"));
Console.WriteLine(d4.ToString("N1"));
アップデート
(1.234).ToString( "N1")は1.2を生成し、追加の10進数を削除することに加えて、千の区切り記号も追加します
まあ、おそらくあなたは現在から派生して使用できるカスタムオブジェクトを実装する必要がありNumberFormatInfo
ます:CultureInfo
double.ToString
var culture = CultureInfo.CurrentCulture;
var customNfi = (NumberFormatInfo)culture.NumberFormat.Clone();
customNfi.NumberDecimalDigits = 1;
customNfi.NumberGroupSeparator = "";
Console.WriteLine(d1.ToString(customNfi));
デフォルトでは読み取り専用であるため、クローンを作成する必要があることに注意してください。
既存の形式は指定した小数点以下の桁数に基づいて切り捨てまたは丸められるため、このメソッドで.0
整数の末尾に必須を追加する組み込みのメソッドはありません。.ToString()
私の提案は、拡張メソッドを使用して独自の実装をロールすることです。
public static String ToDecmialString(this double source)
{
if ((source % 1) == 0)
return source.ToString("f1");
else
return source.ToString();
}
そして使用法:
double d1 = 1;
double d2 = 0.2423423;
double d3 = 0.1;
double d4 = 1234;
Console.WriteLine(d1.ToDecimalString());
Console.WriteLine(d2.ToDecimalString());
Console.WriteLine(d3.ToDecimalString());
Console.WriteLine(d4.ToDecimalString());
この出力の結果:
1.0
0.2423423
0.1
1234.0
次のようなことができます。数値に小数点がない場合は、出力をフォーマットして小数点以下1桁を強制し、小数点以下の桁数がある場合は、ToString();を使用します。
double a1 = 1;
double a2 = 0.2423423;
string result = string.Empty;
if(a1 - Math.Floor(a1) >0.0)
result = a1.ToString();
else
result = a1.ToString("F1");
if (a2 - Math.Floor(a2) > 0.0)
result = a2.ToString();
else
result = a2.ToString("F1");
フォーマットとして使用する場合"F"
、出力には千単位の区切り文字は含まれず、それに続く数字は小数点以下の桁数を指定します。
Doubleは、変換方法をToString()
示すオブジェクトを渡すことができるメソッドを提供します。IFormatProvider
double
0
さらに、すべてのコストで末尾を表示する必要があります。
value = 16034.125E21;
// Display value using the invariant culture.
Console.WriteLine(value.ToString(CultureInfo.InvariantCulture));
// Display value using the en-GB culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("en-GB")));
// Display value using the de-DE culture.
Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("de-DE")));
// This example displays the following output to the console:
// -16325.62015
// -16325.62015
// -16325,62015
// 1.6034125E+25
// 1.6034125E+25
// 1,6034125E+25
これがMSDNのドキュメントです。
ToString( "0.0 ###########################")を使用します。
それは機能します。質問の10進数のToString形式と重複していて、少なくとも1桁、上限はありません。
文字列にキャストして、小数点が指定されていない場合は「.0」を追加できます
string sValue=doubleValue.ToString();
if(!sValue.Contains('.'))
sValue+=".0";
編集:コメントで述べたように'。' 現在のカルチャでは、10進数の区切り文字ではない可能性があります。この場合のためにコードを保存したい場合は、この記事を参照して実際のセパレーターを取得してください。