.Net:number.ToString不带舍入
显示.Net:number.ToString不带舍入,.net,formatting,.net,Formatting,显示5.68。有没有不舍入的数字格式字符串 更新:所需结果为5.67 Dim number = 5.678 Console.WriteLine(number.ToString("#,##0.##")) 这应该行得通。阅读更多答案如果您总是需要截断到两个位置,您可以使用: Console.Write(Math.Truncate(number * 100) / 100); 否则,您可以根据需要更改编号“0.005” 更新:如果您想将其视为字符串,我认为C#中没有任何现成的解决方案,因此您可能需
5.68
。有没有不舍入的数字格式字符串
更新:所需结果为5.67
Dim number = 5.678
Console.WriteLine(number.ToString("#,##0.##"))
这应该行得通。阅读更多答案如果您总是需要截断到两个位置,您可以使用:
Console.Write(Math.Truncate(number * 100) / 100);
否则,您可以根据需要更改编号“0.005”
更新:如果您想将其视为字符串,我认为C#中没有任何现成的解决方案,因此您可能需要执行以下额外工作(您可以创建一个helper方法):
投入:5.678;
产出:5.67
投入:5.6325; 产出:5.63
投入:5.64; 产出:5.64
投入:5.6; 产出:5.6
输入:585.6138
输出:585.61我真的很惊讶没有默认功能。这基本上是ATP的答案,只是他的答案在千位之间加了逗号
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) : ""));
一行:
result=(5.678m-5.0m/(十进制)Math.Pow(10,2+1)).ToString(“0.##”)代码>在不传递任何参数的情况下调用.ToString()。双x=3.1415973;由于您没有提供所需的结果,因此我们必须进行一些猜测。是否要将值截断为小数点后两位?vague数据类型的完整精度?还有别的吗?@HABO:我确信它更像是截断,但使用的是格式字符串,而不是函数,例如Math。如果覆盖ToString()
,并添加对匕首(†
)的格式支持,以指示在何处截断值,并添加双匕首(-
)以指示在何处截断值(这样负值的绝对值就不会减少)…简言之,字符串和数字格式的字符串都不支持截断
函数,即数字格式,就像在my question.cmiw中一样。这仍然会舍入数字,解决方法是用0.005减去数字,对吗?是的,它舍入。但这是更简单的解决方案,在所有情况下都能提供预期的输出。如果您必须将其视为字符串,可以参考我更新的答案。很抱歉,可能是我的错误有问题。我使用ToString()
的意思是将其与字符串格式一起使用,例如ToString(“#,##0.##”)
,而不是将数字视为字符串。
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) : ""));
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