在C#中复制Java的DecimalFormat

时间:2010-05-27 19:29:44

标签: c# java .net formatting

我正在尝试复制Java的DecimalFormat类的子集。以下是我的想法。这对每个人来说都是正确的吗?

public class DecimalFormat : NumberFormat
{
    int _maximumFractionDigits;
    int _minimumFractionDigits;

    string _format;

    void RebuildFormat ()
    {           
        _format = "{0:0.";

        _format += new string ('0', _minimumFractionDigits);
        if (_maximumFractionDigits > _minimumFractionDigits) {
            _format += new string ('#', _maximumFractionDigits -
                         _minimumFractionDigits);
        }

        _format += "}";
    }

    public override string format (object value)
    {
        return string.Format (_format, value);
    }

    public override void setMaximumFractionDigits (int n)
    {
        _maximumFractionDigits = n;
        RebuildFormat ();
    }

    public override void setMinimumFractionDigits (int n)
    {
        _minimumFractionDigits = n;
        RebuildFormat ();
    }

    public override void setGroupingUsed (bool g)
    {
    }

    public static NumberFormat getInstance ()
    {
        return new DecimalFormat ();
    }
}

1 个答案:

答案 0 :(得分:1)

实际上,最简单的方法是使用ToString("N2");,其中2被您想要的小数位数替换。

如果你真的想要最小值和最大值,你也可以使用IFormattable的{​​{1}},它会给你一个至少有两位小数,最多四位的数字,用逗号数字分隔符在整体部分。