0

我正在检索以下十进制值,需要将这些值转换为字符串。

// 百分比列

column1:获取值为 0.08,应在 UI 中显示为 8.00%

// 货币列

Column2:获取值为 1000 的值应在 UI 中显示为 $1000

列 3:获取值为 3000 的值应在 UI 中显示为 $3000

有可能做这样的事情吗?

     String PercentageCustomFormat="{PercentageCustomFormat}";
     string CurrencyCustomFormat="{CurrencyCustomFormat}";

PercentageCustomFormat/ CurrencyCustomFormat 应该包含这样的逻辑:如果任何列返回 Null,它应该显示为“NA”。

检索:

      String.Format("{PercentageCustomFormat}", column1);
      String.Format("{CurrencyCustomFormat}", column2); 

提前致谢

4

2 回答 2

1

是的。您需要创建自己的 and 实现IFormatProvider并将ICustomFormatter其传递给string.Format. 这将根据您传入的格式字符串处理您的自定义格式。

void Main()
{
    var formatter = new CustomFormatProvider();
    var formattedValue = string.Format(formatter, "A format {0:PercentageCustomFormat}", 8.0m);
}

class CustomFormatProvider : IFormatProvider, ICustomFormatter
{
   public object GetFormat(Type formatType)
   {
      return this;
   }   

  public string Format(string format, object arg, IFormatProvider formatProvider){
    if (format == "PercentageCustomFormat")
        return " ... your custom format ... ";

    return arg.ToString();
  }
}
于 2013-09-26T12:48:48.947 回答
0

你能不能只做这样的事情:

percentageString = column1 == null ? "N/A" : String.Format("{0:P0}", column1);
currencyString = column2 == null ? "N/A" : String.Format("{0:C0}", column2);

我认为这里不需要自定义格式提供程序。

于 2013-09-27T22:34:21.197 回答