gpt4 book ai didi

c# - 已四舍五入的小负数的 StringFormat 问题

转载 作者:行者123 更新时间:2023-11-30 17:02:35 25 4
gpt4 key购买 nike

我正在尝试编写一种字符串格式,将数字四舍五入或填充到小数点后两位,并显示带有括号的负数。这是在 WPF 应用程序中,但它适用于任何 .net StringFormat 用例。例如:

  • 2.0 -> 2.00
  • -2.0 -> (2.00)
  • 0.01 -> 0.01
  • -0.01 -> (0.01)
  • 0.001 -> 0.00
  • -0.001 -> (0.00)

最后一个,一个非常小的负数四舍五入为零,是问题所在。我仍然希望括号表示它是否定的。

我的第一个版本是字符串格式如下:

{0:#,##0.00 ;(#,##0.00)}

这不起作用,因为它在应用正/负开关之前将数字四舍五入,因此认为 0.00 不是负数。

然后我尝试了这个,将括号逻辑分成它自己的格式 block ,在数字之前和之后:

{0:;(}{0:#,##0.00 ;#,##0.00}{0:;)}

然而,奇怪的是,这表现出与原始示例相同的行为。它适用于 -0.01,但仍不显示 -0.001 的括号。第一个和最后一个标记必须以某种方式拾取中间数字显示标记的舍入行为。

有没有人知道如何格式化它以便它按我想要的方式工作?

最佳答案

当您说 ;(#,##0.00){0:;(} 时。该值已经四舍五入为 0。因此它不会得到您会得到您期望的结果。

所以最好在符号为负之前检查一下。

var value = -0.001M;
string decimalFormat = value > 0 ? "{0:#,##0.00}" : "({0:#,##0.00})";
Console.WriteLine(String.Format(decimalFormat, value));

应该根据符号在字符串格式之间进行选择。

关于c# - 已四舍五入的小负数的 StringFormat 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19586067/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com