C# 小数点后需要精确的3位数字

C# 小数点后需要精确的3位数字,c#,C#,我希望我的函数返回精确到小数点后3位的值。我尝试了以下代码: public static double ToS(this double value) { double ToS = Convert.ToDouble(String.Format("{0:0.000}", value)); return ToS; } 如果该值大于小数点后3位,则该值将被截断,但如果该值较短,则该值将保持不变 public static double

我希望我的函数返回精确到小数点后3位的值。我尝试了以下代码:

public static double ToS(this double value)
    {
        double ToS = Convert.ToDouble(String.Format("{0:0.000}", value));
        return ToS;
    }

如果该值大于小数点后3位,则该值将被截断,但如果该值较短,则该值将保持不变

public static double ToS(this double value)
{
   return Convert.ToDouble(String.Format("{0:0.###}", value));
}


请参阅:

要显示3位小数的字符串,请执行以下操作

var text = x.ToString("F3");
但要将一个值四舍五入到3位小数,您需要

var y = Math.Round(x, 3);

请注意,从数学上讲,
x=5
x=5.000
是相同的数字。因此,请求存储一个三位数的数字是没有意义的。最好是显示一个数字的字符串表示。

返回的是一个
double
。这只是一个值,不是一个格式化的值。如果您确实想要一个包含3位数字的字符串表示,请返回该字符串。您可能会使用
decimal
,由于它使用的表示法,它可以保留尾部不重要的零,但是
double
不能-例如,0.500和0.5的
double
值没有什么不同。我认为您需要尾部零的唯一原因是用于显示数字,此时,您可以将其转换为带有尾随零的字符串,以显示在UI中。除了在UI中显示数字之外,您这样做是出于其他原因吗?你在这里试图解决的根本问题是什么?输入0.5会返回什么?使用数学。Round(value,3)@Stanislav:这对OP的实际问题有什么帮助?他们希望返回一个小数点后正好有3位数字的值——因此,对于0.5的输入,不知何故要使用“0.500”的双精度值。这是不可能的,因为
double
表示不是这样设计的。如果不更改结果类型,则无法回答此问题。在本例中,您是对的,您应该使用格式,但除法和乘法也没有帮助,但方法返回double@AmitRanjan你的回答没有提供问题本身没有的新内容。
var y = Math.Round(x, 3);