C# 创建自定义 NumberFormatInfo 以显示“Free”当货币价值为 $0.00 时

发布于 2024-09-26 16:40:25 字数 500 浏览 3 评论 0原文

我需要在 ASP.NET MVC 应用程序中显示货币,但当货币为 0 时,我希望它显示“免费”(当然是本地化的!)而不是 $0.00。

所以当我有这样的东西时......

Decimal priceFree = 0.00;
Decimal priceNotFree = 100.00;

priceFree.ToString("C");
priceNotFree.ToString("C");

输出是 “0.00 美元” “$100.00”

我希望是 “自由的” “$100.00”

我想我可以使用 .ToString(string format, IFormatProvider formatProvider) 方法来完成此任务,但我不知道如何去做。显然,我想尽可能多地重用 NumberFormatInfo,并且仅在输入为 0 时覆盖它。在这种情况下,我可以简单地返回包含我的“Free”字符串的本地化资源。

那么我该怎么做呢?

谢谢

I need to display a currency in my ASP.NET MVC application but when the currency is 0 I would like it to display "Free" (localized of course!) instead of $0.00.

So when I have something like this...

Decimal priceFree = 0.00;
Decimal priceNotFree = 100.00;

priceFree.ToString("C");
priceNotFree.ToString("C");

The output is
"$0.00"
"$100.00"

I would like it to be
"Free"
"$100.00"

I imagine I can use the .ToString(string format, IFormatProvider formatProvider) method to accomplish this but I'm not sure how to go about it. Obvious I want to reuse as much of the NumberFormatInfo as possible and only override it when the input is 0. In that case I can simple return a localized resource that contains my "Free" string.

So how do I do this?

Thanks

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

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

发布评论

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

评论(4

深白境迁sunset 2024-10-03 16:40:25

使用

.ToString("$###.00;;Free")

Use

.ToString("$###.00;;Free")
浊酒尽余欢 2024-10-03 16:40:25

我认为最简单的方法是扩展方法:

public static string ToPriceString(this decimal value) 
{
    if (value <= 0m) 
        return "Free"; // Your localized resource
    else 
        return value.ToString("C");
}

如果您想使用 IFormatProviderMSDN 上有一个很好的示例

I think the easiest way to go would be an extension method:

public static string ToPriceString(this decimal value) 
{
    if (value <= 0m) 
        return "Free"; // Your localized resource
    else 
        return value.ToString("C");
}

If you want to go with the IFormatProvider, there is a good example on MSDN.

萌酱 2024-10-03 16:40:25

扩展方法怎么样:

public static string FreeString(this decimal dec)
{
   if(dec == 0M)
   {
      return "Free";
   }
   else
   {
      return dec.ToString("C");
   }
}

然后

priceFree.FreeString();
priceNotFree.FreeString();

How about an extension method:

public static string FreeString(this decimal dec)
{
   if(dec == 0M)
   {
      return "Free";
   }
   else
   {
      return dec.ToString("C");
   }
}

Then

priceFree.FreeString();
priceNotFree.FreeString();
风筝有风,海豚有海 2024-10-03 16:40:25

与其使用自定义 IFormatProvider 并每次都传递它,不如这样:

 public static class MyFormatter
    {
        public static string ToFreeString(this decimal d)
        {
            return d == 0 ? "Free" : d.ToString("d");
        }
    }

Instead of using a custom IFormatProvider and passing it each time, how about this:

 public static class MyFormatter
    {
        public static string ToFreeString(this decimal d)
        {
            return d == 0 ? "Free" : d.ToString("d");
        }
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文