如何最好地在 C# 中对小数进行四舍五入

发布于 2024-08-18 14:16:46 字数 405 浏览 4 评论 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 对我来说有点过大了。

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

I've decimal value 18.8. Values that are stored in this variable can be of any kind. For example it can be 1.0000000 or 1.00004000 or 5.00000008.
I would like to write a method so that I can pass decimal to it and get rounded up string. This wouldn't be a problem if I would know decimal places I would like to get. But what I would like to get is:

When it's 1.0000000 it should return 1.
If it's 1.00004000 it should return 1.00004.
When it's 5.00000008 it should return 5.00000008.
So basically it should find all 0 that are behind last digit different then 0 and cut it off.

How should I approach it? What's the best method? I'm getting this value from SQL and put it in decimal variable but then i would like to display it and having 5.0000000 when it could be displayed as 5 is a bit overkill for me.

Hope I could get some nice suggestions.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

落花随流水 2024-08-25 14:16:46

AFAIK,ToString( "0.##" ) 就可以了,只需增加 # 的数量,这样你的值就不会向上舍入。例如:

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

这将生成“1,999”字符串(分隔符取决于所使用的区域性)。

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

AFAIK, ToString( "0.##" ) will do, just increase number of # so that your value won't round up. E.g.:

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

This will generate "1,999" string (delimiter depends upon used culture).

As a result, you can use common very long formatting string: "0.############################" - to format all your values.

迷路的信 2024-08-25 14:16:46

因此,从末尾修剪掉零。

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

So trim the zeroes from the end.

decimal d = 1.999m;
string dStr = d.ToString().TrimEnd('0').TrimEnd('.');
桃扇骨 2024-08-25 14:16:46

您还可以使用 string.Format这里是不同可能格式的文档,但我喜欢 Johan Sheehans 备忘单更多作为快速参考。

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

You can also use string.Format and here's the documentation of the different possible formats but I like Johan Sheehans cheat sheet more as a quick reference.

decimal number=4711.00004711m;
4711.00004711
string.Format("{0:0.#############}",number);
"4711,00004711"
number=42;
42
string.Format("{0:0.#############}",number);
"42"
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文