2010-05-27 57 views
1

我试图复制Java的DecimalFormat类的一个子集。以下是我想到的。这是否适合所有人?在C#中复制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(); 
    } 
} 
+4

在.NET中格式化小数点是非常容易的。你为什么要模仿一个让它更复杂的Java类? – Powerlord 2010-05-27 19:34:23

+1

@R。 Bemrose:是.....原因? – Randolpho 2010-05-27 19:38:41

+2

@ R. Bemrose:为什么人们使用SQL Server?为什么玫瑰是红色的?我们都有我们的商业理由。就我而言,我有很多来自Java的具有特定格式要求的测试代码。我不想把所有这些领域知识都抛出窗外。 – 2010-05-27 19:40:53

回答

1

其实,最简单的方法是使用ToString("N2");,其中2是您想要的小数号码代替。

如果你真的想要最小和最大,你也可以使用IFormattableToString("#,#.00##", CultureInfo.CurrenCulture);这将给你一个数字,至少有两个小数位,最多四个,在整数部分用逗号数字分隔符。

+0

但是,如何尊重最低和最高?这只是设置最大值。 – 2010-05-27 19:39:49

+0

我已更新我的回复以解决您的评论。 – Powerlord 2010-05-27 19:52:31

+0

(1)对象没有1 arg ToString方法。 (2)运行时最小和最大变化。这就是我的代码正在做的事情。请阅读该问题,我正在寻找确认这是复制DecimalFormat的正确格式字符串。 – 2010-05-27 20:09:36