如何最好地在c#中舍入小数

时间:2010-01-18 12:48:03

标签: c# decimal rounding

我的小数值为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对我来说有点矫枉过正。

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

关于,

MadBoy

4 个答案:

答案 0 :(得分:9)

AFAIK,ToString(“0。##”)会这样做,只需增加#的数量,这样你的价值就不会四舍五入。例如:

decimal d = 1.999m;
string dStr = d.ToString("0.###");

这将生成“1,999”字符串(分隔符取决于使用的文化)。

因此,您可以使用常见的非常长的格式化字符串:"0.############################" - 来格式化您的所有值。

答案 1 :(得分:2)

从最后修剪零。

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

答案 2 :(得分:1)

您还可以使用string.Formathere's不同格式的文档,但我更喜欢Johan Sheehans cheat sheet作为快速参考。

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

答案 3 :(得分:-1)