Tag: iformatprovider

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

我需要在我的ASP.NET MVC应用程序中显示货币,但当货币为0时,我希望它显示“Free”(当然是本地化的!)而不是0.00美元。 所以,当我有这样的事情…… Decimal priceFree = 0.00; Decimal priceNotFree = 100.00; priceFree.ToString(“C”); priceNotFree.ToString(“C”); 输出为“$ 0.00”“$ 100.00” 我希望它是“免费”“100.00美元” 我想我可以使用.ToString(字符串格式,IFormatProvider formatProvider)方法来实现这一点,但我不知道如何去做。 显然,我希望尽可能多地重用NumberFormatInfo,并在输入为0时仅覆盖它。在这种情况下,我可以简单地返回包含“Free”字符串的本地化资源。 那我该怎么做? 谢谢

ToString的奇数十进制类型行为(IFormatProvider)

var numberFormat = new NumberFormatInfo(); numberFormat.NumberDecimalSeparator = “.”; numberFormat.NumberDecimalDigits = 2; decimal a = 10.00M; decimal b = 10M; Console.WriteLine(a.ToString(numberFormat)); Console.WriteLine(b.ToString(numberFormat)); Console.WriteLine(a == b ? “True”: “False”); 在控制台中:10.00 10真 为什么会有所不同? 更重要的是,无论变量如何初始化,如何调用ToString()以确保相同的输出?

如何使用NumberFormatInfo删除负值的括号

我们目前正在使用以下内容在我们的网络应用程序中创建美元价值: string.Format(“{0:C0}”, dollarValue ); 在这个例子中,如果dollarValue是145,那么我们将看到:145美元。 如果它是-145,那么我们将看到(145美元)而不是 – 145美元。 请注意,对于我们来说,dollarValue是一个double,但它可以是任何数字类型。 我认为。 无论如何,我想要的是145美元或145美元。 现在,根据我的研究,可以使用NumberFormatInfo类来完成此操作。 我无法弄清楚如何使用它,我找不到任何有效的例子。 我确实在这里看到了这个问题: 当货币值为0.00美元时,C#创建一个自定义的NumberFormatInfo来显示“Free”但是来自这个问题的MSDN示例似乎与我真正想做的有点不同。 我知道,我需要做以下事情: double dollarValue = -145d; string myMoney = dollarValue.ToString( “C0”, someIFormatProvider ); someIFormatProvider可能是NumberFormatInfo类型。 现在,我所做的就是: NumberFormatInfo ni = new NumberformatInfo(); ni.CurrencyNegativePattern = 1; // The value 1 should mean not to use parenthesis string myMoney = dollarValue.ToString( “C0”, ni ); …我得到一个“Instance […]

如何为DateTime创建和使用自定义IFormatProvider?

我试图创建一个IFormatProvider实现,可以识别DateTime对象的自定义格式字符串。 这是我的实施: public class MyDateFormatProvider : IFormatProvider, ICustomFormatter { public object GetFormat(Type formatType) { if (formatType == typeof(ICustomFormatter)) { return this; } return null; } public string Format(string format, object arg, IFormatProvider formatProvider) { if(arg == null) throw new ArgumentNullException(“arg”); if (arg.GetType() != typeof(DateTime)) return arg.ToString(); DateTime date = (DateTime)arg; switch(format) { case “mycustomformat”: switch(CultureInfo.CurrentCulture.Name) […]