将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 型是四舍五入吗?

java中将一个double类型的数强制转换为long 型是四舍五入吗?

在 Swift 中将 JSON 数据转换为 Double

在pyspark中将字符串价格值转换为double类型

c语言中将一个浮点型赋值给整型时,会不会四舍五入?

在C#中将十六进制字符串转换为其数值[重复]