2011-11-23 68 views
23

我有double的值,如12.256852651,我想将其显示为12.257作为浮点数,而不将其转换为字符串类型。浮点值的舍入

如何在C#中执行此操作?

+2

Math.Round(value,3)http://msdn.microsoft.com/en-us/library/75ks3aby.aspx – FailedDev

+3

你是什么意思,而不是一个字符串格式?您将数字格式化为字符串以显示它,是不是? –

+0

也许它是通过一个数字(json,说)。除了转换为字符串以在UI中显示之外,它可能需要存储为数字客户端。只是基于类似的使用情况在这里猜测。 –

回答

41

我想先转换为Decimal,然后在结果上使用Math.Round。这种转换不是绝对必要的,但是如果我在使用二进制浮点的同时舍入到小数位,我总是感到有点不安。

Math.Round((Decimal)f, 3, MidpointRounding.AwayFromZero) 

你也应该看看的MidpointRounding的选择,因为它默认使用银行家的圆,这是不是你从学校来的。

+0

请记住,在将二进制(与System.Decimal相反)浮点类型四舍五入为大于“0”的小数位数时,通常“中点”不能完全表示。例如,“中点”12.2565(邻居的平均值“12.256”和“12.257”)由于其二进制扩展是无限的(周期性的)(常常是这种情况),因此不能完全表示为“双”。因此,如果想要实际击中“中点”,在舍入前尝试转换为“小数点”是一个很好的理由。 “双”在中点应该有一个“洞”。 –

8

如果你想显示它,它将是一个字符串,这就是你需要使用的。

如果您想要回合为了稍后在计算中使用它,请使用Math.Round((decimal)myDouble, 3)

如果您不打算在计算中使用它,但需要显示它,请使用double.ToString("F3")