【问题标题】:Remove $ from .ToString("{0:C}") formatted number从 .ToString("{0:C}") 格式的数字中删除 $
【发布时间】:2013-07-06 15:37:54
【问题描述】:

基本上我是这样格式化数字的

@String.Format("{0:C}", Model.Price)

结果是 $2,320,000.00

然而,我想要的结果是2,320,000.00,只是没有$。我怎样才能做到这一点,同时仍然利用 .nets 本地化处理?

编辑

如果我想改变我的班级,这样当有人试图获得Price 时,他会得到这种格式化的价格。这是我的课

public class Listing : DomainObject
{   
    public decimal Price { get; set; }
    public decimal Commission { get; set; }
}

【问题讨论】:

  • 我编辑的原因是,在我的第一种情况下,我必须在我使用 place 的每个地方进行更改,而在第二种情况下,它会自动在任何地方完成。
  • 你可以创建特殊方法作为你的类的成员..

标签: c# string-formatting


【解决方案1】:

使用N 而不是C 作为您的format specifier

@String.Format("{0:N}", Model.Price)

“C”或“c”货币结果:货币值。

123.456(“C”,en-US)-> $123.46

“N”或“n”数字结果:整数和小数位、组分隔符和小数

1234.567(“N”,en-US)-> 1,234.57

即你得到一个货币符号是因为你要求要一个。

【讨论】:

  • 谢谢,这很好,但是我的第二个问题呢?
  • @user2413182 - 没有任何意义 - 如果有人指定将字符串中的小数格式化为货币,则将包含货币符号。其他任何事情都会令人深感惊讶,这并不能带来良好的编程体验。
  • 这会改变否定的行为,它们在 {0:C} 的括号中并在 {0:N} 中显示负号,所以你解决了一个问题,如果你明智的话,可能会提出另一个问题让负数显示为货币,只是没有货币符号。
  • 正如我现在在实践中看到的那样,“N”从 CultureInfo 获取 NumberDecimalSeparator,而“C”使用 CurrencySeparator。您可以使用 ru-RU 自己查看
  • 这个答案可以通过解释为什么在此示例中使用“N”格式说明符会导致 2 个十进制数字(而不是无,或 3 等)来改进
【解决方案2】:

宁可使用{0:F2},因为这不会像 {0:C} 中那样包含逗号','。

Console.Write("{0:F2}", 2.5); //2.50
Console.Write("{0:F0}", 25);  //25

【讨论】:

    【解决方案3】:

    您需要将 Price 属性设为字符串,并有一个小数的支持字段,然后在 Price 属性的 getter 中执行您的字符串格式。

    private decimal price;
    
    public String Price 
    {
       get { return String.Format("{0:N}", price); }
    }
    

    然后你可以使用 @Model.Price 用于展示。

    【讨论】:

      【解决方案4】:

      【讨论】:

      • 你的 price 属性是decimal,所以它根本没有指定格式。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-01
      • 1970-01-01
      • 2014-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多