22

double 値を丸めずに小数点以下 1 桁にフォーマットする必要があります。

double value = 3.984568438706
string result = "";

私が試したことは次のとおりです。

1)

result = value.ToString("##.##", System.Globalization.CultureInfo.InvariantCulture) + "%"; 
// returns 3.98%

2)

result = value.ToString("##.#", System.Globalization.CultureInfo.InvariantCulture) + "%"; 
// returns 4%

3)

 result = value.ToString("##.0", System.Globalization.CultureInfo.InvariantCulture) + "%"; 
 // returns 4.0%

4) (他の提案に従う)

value = (value / 100);
result = String.Format("{0:P1}", Math.Truncate(value * 10000) / 10000);
// returns 4.0%

result = string.Format("{0:0.0%}",value); // returns 4.0%

表示する必要があるのは、値 3.9% です

事前に助けてくれてありがとう。

4

6 に答える 6

29
result=string.Format("{0:0.0}",Math.Truncate(value*10)/10);
于 2012-07-31T16:03:52.807 に答える
6

これを処理するためのユーティリティ メソッドを作成します。

static double Truncate(double value, int digits)
{
    double mult = System.Math.Pow(10.0, digits);
    return System.Math.Truncate(value * mult) / mult;
}

次に、次のことができます。

result = Truncate(value, 1).ToString("##.#", System.Globalization.CultureInfo.InvariantCulture) + "%"; 

切り捨ての代わりにMath.Floorが必要な場合もありますが、負の値をどのように処理するかによって異なります。

于 2012-07-31T16:05:09.720 に答える
2

ToString()しません。余分なコードを追加する必要があります。他の回答は数学的なアプローチを示しています。以下の私のアプローチは、独創的なものです。

string result = value.ToString();
Console.WriteLine("{0}", result.Substring(0, result.LastIndexOf('.') + 2));

これはかなり単純な力ずくのアプローチですが、小数点が「.」の場合に効果があります。これは、痛みを和らげる (そして小数点を処理する) 拡張メソッドです。

public static class Extensions
{
    public static string ToStringNoTruncate(this double me, int decimalplaces = 1)
    {
        string result = me.ToString();
        char dec = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator[0];
        return result.Substring(0, result.LastIndexOf(dec) + decimalplaces + 1);
    }
}
于 2012-07-31T16:07:40.537 に答える
0
( Math.Truncate( ( value * 10 ) ) / 1000 ).ToString( "#.#%" )
于 2012-07-31T16:08:32.957 に答える
0

モジュロ演算子 + ビルトインを使用するだけですToString:

result = (value - (value % 0.1)).ToString("N1") + "%";
于 2012-07-31T16:09:23.087 に答える