.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