.Net:number.ToString没有舍入

时间:2015-10-26 02:12:33

标签: .net formatting

Dim number = 5.678
Console.WriteLine(number.ToString("#,##0.##"))

显示5.68。是否有任何数字格式字符串没有舍入它?

更新:所需结果为5.67

3 个答案:

答案 0 :(得分:0)

 Console.Write(Math.Truncate(number * 100) / 100);

这应该有效。阅读更多答案here

答案 1 :(得分:0)

如果你总是要截断到2个地方,你可以使用:

Console.WriteLine("{0:F2}", number - 0.005);

否则你可以更改数字' 0.005'根据您的需要。

更新:如果你想把它当作字符串,我不认为C#中有任何现成的解决方案,所以你可能需要做一些额外的工作,如下所示(你可以创建一个帮助方法):< / p>

const double number = 5.678; //input number
var split = number.ToString(CultureInfo.InvariantCulture).Split('.');
Console.WriteLine(split[0] + (split.Length > 1 ? "." : "") + (split.Length > 1 ? split[1].Substring(0, split[1].Length > 1 ? 2 : split[1].Length) : ""));

输入:5.678; 输出:5.67;

输入:5.6325; 输出:5.63;

输入:5.64; 输出:5.64

输入:5.6; 输出:5.6;

输入法:585.6138 输出:585.61

答案 2 :(得分:0)

我真的很惊讶没有默认功能。这基本上是ATP的答案,除了他的逗号在数千个位置之间。

int precision = 2;
string format = "0.##";
decimal rounder = 5.0m/(decimal) Math.Pow(10, precision + 1);
var result = (5.678m - rounder).ToString(format); // This doesn't work for a value of 0m

一行:

result = (5.678m - 5.0m / (decimal)Math.Pow(10, 2 + 1)).ToString("0.##");