C#如何在不进行舍入的情况下将双精度数组格式化为一位小数

SMU*_*LER 20 c# rounding string-formatting

我需要将double值格式化为一个小数位而不进行舍入.

double value = 3.984568438706
string result = "";
Run Code Online (Sandbox Code Playgroud)

我试过的是:

1)

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

2)

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

3)

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

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%
Run Code Online (Sandbox Code Playgroud)

我需要显示的是3.9%的值

在此先感谢您的帮助.

Bob*_*ale 26

result=string.Format("{0:0.0}",Math.Truncate(value*10)/10);
Run Code Online (Sandbox Code Playgroud)


Ree*_*sey 6

我会制作一个实用方法来处理这个问题:

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

然后你可以这样做:

result = Truncate(value, 1).ToString("##.#", System.Globalization.CultureInfo.InvariantCulture) + "%"; 
Run Code Online (Sandbox Code Playgroud)

请注意,您可能还需要Math.Floor而不是 truncate - 但这取决于您希望如何处理负值。