将double转换为字符串时,如何在C#中将其四舍五入到N个小数位? [复制]
Posted
技术标签:
【中文标题】将double转换为字符串时,如何在C#中将其四舍五入到N个小数位? [复制]【英文标题】:When converting double to string, how can I round it up to N decimal places in C#? [duplicate] 【发布时间】:2012-01-06 19:19:47 【问题描述】:可能重复:Round a double to 2 significant figures after decimal point
我需要至多 N 个小数,不再需要,但我不想要尾随零。例如,如果 N = 2 那么
15.352 15.355 15.3 15
应该成为(分别)
15.35 15.36 15.3 15
【问题讨论】:
您希望第三位数字“5”总是四舍五入,还是四舍五入? 出于兴趣,这些数字代表什么?您可能应该使用decimal
而不是 double
开始。
它们是我用来绘制图形或显示在表格中的值。此外,我对这些数字集执行一些操作,以获得每小时、每天、每周(等)的平均值、最大值、最小值或总数,然后在图表/表格上使用这些值。绘制图表时,我总是使用double
,但是例如,将平均值放在表格中会产生无法阅读的数字混乱,这就是为什么我需要以这种方式格式化它们(并且每一列都需要四舍五入到不同的位数)。
但实际代表的值是什么?高度?钱?
目前它们是温度、百分比(例如湿度)、给定时期内的降雨量等。但它们可以是任何你可以放在图表上的东西。
【参考方案1】:
试试Math.Round(value, 2).ToString()
Math.Round(15.352, 2).ToString(); //15.35
Math.Round(15.355, 2).ToString(); //15.36
Math.Round(15.3, 2).ToString(); //15.3
Math.Round(15.0, 2).ToString(); //15
round 的第二个参数是让您指定要四舍五入的小数位数。默认情况下会四舍五入。
【讨论】:
是的,这就是工作。谢谢!【参考方案2】:这可以通过使用自定义格式字符串来完成,例如“0.##”,它最多显示两位小数。
String.Format("0:0.##", 123.4567); // "123.46"
参考:http://www.csharp-examples.net/string-format-double/
【讨论】:
是的,这对 N = 2 有效,但我希望有一种方法可以将任何 N 转换为字符串。例如使用 double.ToString("N" + X.ToString ()),其中 X 是 int,会这样做,但也会添加我不想要的尾随零。 @NikolaNovak 在您的情况下可以使用十进制而不是双精度吗?如果是这样,您可以使用 Decimal.Round(Decimal, Int32) 方法。 msdn.microsoft.com/en-gb/library/6be1edhb.aspx 在问题的 cmets 中查看我与 Jon Skeet 的交流。【参考方案3】:Google 确实领先:使用 ## 跳过格式字符串中的前导零。
// max. two decimal places
String.Format("0:0.##", 123.4567); // "123.46"
String.Format("0:0.##", 123.4); // "123.4"
String.Format("0:0.##", 123.0); // "123"
【讨论】:
以上是关于将double转换为字符串时,如何在C#中将其四舍五入到N个小数位? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
java中将一个double类型的数强制转换为long 型是四舍五入吗?