【问题标题】:ASP.NET - Negative numbers in ParenthesisASP.NET - 括号中的负数
【发布时间】:2009-01-07 01:06:02
【问题描述】:

我的应用程序当前将负数显示为 -1。用户已经改变了要求(只是为了改变!),现在我们必须将数字显示为 (1)。 我可以为整个应用程序启用它,比如更改 web.config 甚至应用程序的 CultureInfo 吗?由于我们有很多包含数字验证器的页面,这样做有什么副作用吗?

谢谢!

【问题讨论】:

  • 顺便说一句 - 这并不像看起来那样随机。在某些会计符号中,括号是标准符号而不是负号。
  • 显示()而不是负数几乎是会计的标准。

标签: asp.net web-config cultureinfo


【解决方案1】:

对于货币来说真的很容易:

String.Format("{0:C}", value)

这将使用系统的文化信息。

对于数据绑定的普通数字,请使用Mark Glorie's sample

MSDN Article

【讨论】:

  • 汤姆给你更多积分。我们已经根据用户所在的国家/地区设置了正确的 CultureInfo,并使用模式“{0:C}”、“{0:n}”来为系统使用文化信息。谢谢。
【解决方案2】:

我会使用字符串格式。对应用程序的配置进行更改以满足 UI 要求是很严厉的。 SteveX 写了一篇关于字符串格式化的great blog post。它还与标记 (aspx) 兼容,而不仅仅是与代码相关。

来自他的帖子:

String.Format(”{0:$#,##0.00;($#,##0.00);Zero}”, value);

    This will output “$1,240.00″ if passed 1243.50. It will output the 
    same format but in parentheses if the number is negative, and will
    output the string “Zero” if the number is zero.

这不是您想要的,但很接近。

【讨论】:

  • 但是,如果您的应用程序只有处理计算和其他内容的屏幕,例如会计应用程序,该怎么办?你会在所有屏幕上改变它吗?如果需求再次改变?
  • 这个应用程序会在不同的国家运行吗?然后你需要担心本地化,这会带来新的变化。如果你真的想在你的应用程序中有一个地方给你返回格式化的字符串,那很好,使用静态类中的方法。但是从标记中调用该方法很困难。
  • 是的,这个应用程序将在不同的国家/地区运行....
【解决方案3】:

检查这个.. http://msdn.microsoft.com/en-us/library/91fwbcsb.aspx

将指定样式的数字的字符串表示形式转换为其等效的十进制。

【讨论】:

    【解决方案4】:

    我已将以下页面添加为用于进行字符串格式化的书签:http://idunno.org/archive/2004/14/01/122.aspx

    大约到了一半,它给出了答案:

    String.Format("{0:£#,##0.00;(£#,##0.00);Nothing}", value);
    

    为了回答您的其他问题,出于其他答案中给出的原因,我不会修改 app.config 以使其全局化。

    【讨论】:

      【解决方案5】:
      String.Format(”{0:f;(f);0”, -1);
      

      【讨论】:

        【解决方案6】:

        这行得通。

        DataFormatString="{0:c0}"
        
        • 括号中的负数
        • 千位分隔符 - 逗号
        • 前面有$符号

        【讨论】:

          【解决方案7】:

          您始终可以编写自己的自定义 ToString() 方法作为扩展方法,但就像您提到的那样,使用 CultureInfo 可能会更好。看这里:

          http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.numbernegativepattern.aspx

          【讨论】:

          • 永远不会调用“重载”的扩展方法 ToString() - C# 编译器更喜欢调用实际实例方法而不是扩展方法,并且由于 System.Object 定义了 ToString(),因此您几乎陷入困境.
          【解决方案8】:

          您是否在 Gridview/Datagrids 中显示您的数据?如果是这样,那么可以对每个绑定列应用格式,例如:

          <asp:BoundField DataFormatString="{##;(##)}"/>
          

          这仅适用于整数...

          【讨论】:

            猜你喜欢
            • 2015-10-16
            • 1970-01-01
            • 2017-03-20
            • 2019-06-10
            • 2013-11-04
            • 2014-10-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多