2013-01-09 12 views
3

我有一個函數可以將小數轉換爲相當的分數。我發現了一些分數,但我似乎無法找到十六分之一(1/16)的分數。任何人都可以提出任何建議,以便我可以在網上看到或者讓我將這三個字符分數轉換爲一個字符分數。分數的字體

我有一個下面的位圖,顯示了16分之幾部分佔用這麼多房地產,不像其他看起來很好,很小的部分。

我已經添加了我正在使用的函數來轉換下面的這些分數。

我已經在網上到處查過,還沒有得到解決。

如果我可以在這裏找到類似http://msdn.microsoft.com/en-us/library/ms745109.aspx的東西,可以看到數值類型的四分之三。如果我能得到像Windows圖形的堆疊版本那樣的東西,那將是一場勝利。

Door Details

static string getFractionFromDecimal(decimal dec) 
    { 
     string d = dec.ToString(), dd = string.Empty; 
     switch (d) 
     { 
      case "0.0625": dd = " 1/16"; break; 
      case "0.1250": dd = "⅛"; break; 
      case "0.1875": dd = " 3/16"; break; 
      case "0.2500": dd = "¼"; break; 
      case "0.3125": dd = " 5/16"; break; 
      case "0.3750": dd = "⅜"; break; 
      case "0.4375": dd = " 7/16"; break; 
      case "0.5000": dd = "½"; break; 
      case "0.5625": dd = " 9/16"; break; 
      case "0.6250": dd = "⅝"; break; 
      case "0.6875": dd = " 11/16"; break; 
      case "0.7500": dd = "¾"; break; 
      case "0.8125": dd = " 13/16"; break; 
      case "0.8750": dd = "⅞"; break; 
      case "0.9375": dd = " 15/16"; break; 
     }; return dd; 
    } 
+0

我不認爲這是可能的,如果你想使用默認字體。你會考慮另一種方法嗎?你在'TextBox'或者'Label'中使用字符串嗎? – Mir

+0

我在c#windows應用程序中使用Graphics.DrawString將字符串寫入位圖。上面的圖像是一個位圖。 –

+0

@StorefrontDoors我在完成我的答案後閱讀了您的評論。在這種情況下,您可以重複使用我編寫的繪圖代碼。 – Mir

回答

4

我已經寫了一本小類,可以幫助你畫一小部分。請注意,我已經硬編碼了許多值,這是而不是的良好做法。如果你打算使用這個概念,我建議你參數化代碼中的乘數。

public class FractionLabel : Control 
{ 
    public int Numerator { get; set; } 
    public int Denominator { get; set; } 
    public Brush Brush { get; set; } 

    protected override void OnPaint(PaintEventArgs e) 
    { 
     var graphics = e.Graphics; 
     var font = Font; 
     var n = Numerator.ToString(); 
     var d = Denominator.ToString(); 
     var numSize = graphics.MeasureString(n, font); 
     graphics.DrawString(n, Font, Brush, new PointF()); 
     //Comment out the following line if you want sharp lines 
     graphics.SmoothingMode = SmoothingMode.AntiAlias; 
     using (var pen = new Pen(Brush)) 
     { 
      var p1 = new PointF(numSize.Width/2, numSize.Height*5/4); 
      var p2 = new PointF(numSize.Width*5/4, numSize.Height/2); 
      graphics.DrawLine(pen, p1, p2); 
     } 
     var dPos = new PointF(numSize.Width*3/4, numSize.Height*3/4); 
     graphics.DrawString(d, Font, Brush, dPos); 
    } 
} 

使用範例:

var label = new FractionLabel 
      { 
       Numerator = 3, 
       Denominator = 16, 
       Font = new Font("Arial", 8), 
       Brush = Brushes.Black, 
       Width = 100, 
       Height = 100 
      }; 
Controls.Add(label); 

如果你修改這個類和整合它,你可以修改你的方法返回一個FractionLabel而不是string的。

+0

偉大的工作!謝謝。 –