C# 如何以最佳方式在C中舍入小数#

C# 如何以最佳方式在C中舍入小数#,c#,decimal,rounding,C#,Decimal,Rounding,我的十进制值是18.8。存储在此变量中的值可以是任何类型。例如,它可以是1.0000000或1.00004000或5.00000008。 我想写一个方法,这样我就可以将十进制数传递给它,并将字符串四舍五入。如果我知道我想得到的小数位数,这不会是个问题。但我想得到的是: 当值为1.0000000时,应返回1。 如果是1.00004000,则应返回1.00004。 当它为5.00000008时,它应该返回5.00000008。 所以基本上,它应该找到所有在最后一个数字后面的0,与0不同,然后将其切断

我的十进制值是18.8。存储在此变量中的值可以是任何类型。例如,它可以是1.0000000或1.00004000或5.00000008。 我想写一个方法,这样我就可以将十进制数传递给它,并将字符串四舍五入。如果我知道我想得到的小数位数,这不会是个问题。但我想得到的是:

当值为1.0000000时,应返回1。
如果是1.00004000,则应返回1.00004。
当它为5.00000008时,它应该返回5.00000008。 所以基本上,它应该找到所有在最后一个数字后面的0,与0不同,然后将其切断

我应该怎么做?最好的方法是什么?我从SQL中得到这个值,并把它放在十进制变量中,但我想显示它,当它可以显示为5时,有5.0000000对我来说有点过分了

希望我能得到一些好的建议。

好的,ToString(“0.###”)就可以了,只需增加#的数量,这样你的值就不会被取整了。例如:

decimal d = 1.999m;
string dStr = d.ToString("0.###");
这将生成“1999”字符串(分隔符取决于使用的区域性)


因此,您可以使用常见的非常长的格式字符串:
“0.\35;

decimal d = 1.999m;
string dStr = d.ToString().TrimEnd('0').TrimEnd('.');

请看Jon Skeets的文章:

您也可以使用不同格式的文档,但我更喜欢Johan Sheehans作为快速参考

decimal number=4711.00004711m;
4711.00004711
string.Format("{0:0.#############}",number);
"4711,00004711"
number=42;
42
string.Format("{0:0.#############}",number);
"42"

我不知道我需要多少小数位。这将工作,如果我知道我想切断后,3位或更多。但我只想在最后一个非零后面的所有数字都是零的情况下将其截断。如果你有1.00004000,那么在ToString(“0.”之后,你将有“1.00004”。说到标志的最大值:它是28。十进制允许最大28-29位有效数字。这使得1表示前导零,28表示其他符号。即使您有smth,比如15555.98900008900,也可以。谢谢,它可以工作。我应该在怀疑它会像你说的那样工作之前测试它。如果有1000000.00的值呢?我想他会失去所有的零分吧?或者还有“1000000”。他只丢失了点(.)后面的零。还有点,但他可以添加另一个
TrimEnd('.')
。对于I18N,他不应该使用点,而应该使用特定于区域性的分隔符。一篇讨论二进制浮点与问题所涉及的
decimal
类型有何关联的文章?