8

これはおそらくばかげていますが、それは私に苦労を与えています。必須の小数点doubleを使用してに変換/フォーマットする必要があります。string

1         => 1.0
0.2423423 => 0.2423423
0.1       => 0.1
1234      => 1234.0

基本的に、すべての小数を出力したいのですが、丸められた値にも冗長性があることを確認し.0ます。これを達成する簡単な方法があると確信しています。

4

6 に答える 6

7

使用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"));

デモ

標準の数値形式の文字列

数値( "N")フォーマット指定子

アップデート

(1.234).ToString( "N1")は1.2を生成し、追加の10進数を削除することに加えて、千の区切り記号も追加します

まあ、おそらくあなたは現在から派生して使用できるカスタムオブジェクトを実装する必要がありNumberFormatInfoます:CultureInfodouble.ToString

var culture = CultureInfo.CurrentCulture;
var customNfi = (NumberFormatInfo)culture.NumberFormat.Clone();
customNfi.NumberDecimalDigits = 1;
customNfi.NumberGroupSeparator = "";
Console.WriteLine(d1.ToString(customNfi));

デフォルトでは読み取り専用であるため、クローンを作成する必要があることに注意してください。

デモ

于 2013-03-27T12:11:52.893 に答える
5

既存の形式は指定した小数点以下の桁数に基づいて切り捨てまたは丸められるため、このメソッドで.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
于 2013-03-27T12:26:58.417 に答える
3

次のようなことができます。数値に小数点がない場合は、出力をフォーマットして小数点以下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"、出力には千単位の区切り文字は含まれず、それに続く数字は小数点以下の桁数を指定します。

于 2013-03-27T12:20:34.813 に答える
0

Doubleは、変換方法をToString()示すオブジェクトを渡すことができるメソッドを提供します。IFormatProviderdouble

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のドキュメントです。

于 2013-03-27T12:12:16.237 に答える
0

ToString( "0.0 ###########################")を使用します。

それは機能します。質問の10進数のToString形式と重複していて、少なくとも1桁、上限はありません。

于 2014-03-15T08:51:46.723 に答える
-1

文字列にキャストして、小数点が指定されていない場合は「.0」を追加できます

string sValue=doubleValue.ToString();
if(!sValue.Contains('.'))
    sValue+=".0";

編集:コメントで述べたように'。' 現在のカルチャでは、10進数の区切り文字ではない可能性があります。この場合のためにコードを保存したい場合は、この記事を参照して実際のセパレーターを取得してください。

于 2013-03-27T12:11:59.097 に答える