【问题标题】:two ways of displaying a decimal显示小数的两种方式
【发布时间】:2010-10-03 23:48:33
【问题描述】:

假设我有一个小数列表:

List<decimal> values;

和2个函数显示小数:

string DisplayPct(decimal pct)
{
   return pct.ToString("0.00 %");
}

string DisplayValue(decimal val)
{
   return val.ToString("0.00");
}

实现的最佳机制是什么,以便我可以根据值知道要调用哪个函数?

我希望在 C# 中拥有例如 typedef。这样,我可以声明一个 Percent 类型和一个 Decimal 类型,它们都表示十进制值,但是我可以知道如何根据其类型显示该值。

C# 中的任何等价物?

谢谢

【问题讨论】:

  • 仅供参考:根据区域设置,分隔符可能是逗号而不是点。

标签: c# types


【解决方案1】:

这是我的课程:

    public class Percent
    {
        public decimal value;
        public Percent(decimal d) { value = d; }
        public static implicit operator Percent(decimal d) { return new Percent(d); }
        public static implicit operator decimal(Percent p) { return p.value; }
    }
    public class DecimalPrecise
    {
        public decimal value;
        public DecimalPrecise(decimal d) { value = d; }
        public static implicit operator DecimalPrecise(decimal d) { return new DecimalPrecise(d); }
        public static implicit operator decimal(DecimalPrecise d) { return d.value; }
    }

【讨论】:

  • 只需覆盖 ToString() 就可以了。我忘了小数不应该包含在结构中,我会编辑我的答案。
【解决方案2】:

在一个类中包装百分比。您需要做一些工作。只需确保定义 implicit operator 以捕获小数,以及您需要的一些其他操作和 ToString。

【讨论】:

  • 感谢隐式运算符提示,我找到了方法。如果可以改进,请随时发表评论
【解决方案3】:

听起来你想要两个类:小数和百分比。每个都有一个 ToString 可以正确打印。如果它们都具有相同的接口,则可以使用该通用接口在 List 中拥有两者的集合。

【讨论】:

  • 那么,我创建了一个继承十进制的类..?
  • 不完全。您的列表应该是 value 类型,其中 value 是公共接口。然后创建两个类,每个类都继承自value:decimal 和 percent。
  • 请问如何更精确地定义该接口?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-23
  • 2019-07-09
  • 1970-01-01
相关资源
最近更新 更多