2013-01-09 7 views
3

십진수를 소수로 변환하는 함수가 있습니다. 분수의 일부를 찾았지만 16 분의 1 분수를 찾을 수없는 것 같습니다. 누구나 내가 그물을 볼 수있는 곳이나이 세 문자 분수를 한 문자 분수로 변환 할 수있는 방법에 대한 제안을 받았다.분수 글꼴

나는 16nth 분수가 멋지고 작아 보이는 다른 분수와 달리 매우 현실적인 부분을 차지하는 비트 맵을 보여줍니다.

아래에서 이러한 분수를 변환하는 데 사용하는 기능을 추가했습니다.

나는 모든 곳을 온라인에서 확인했지만 아직 해결되지 않았습니다.

내가 여기 http://msdn.microsoft.com/en-us/library/ms745109.aspx 페이지의 아래 약 3/4 지점을 얻을 수 있다면 수치 유형을 볼 수 있습니다. 만약 내가 승리가 될 윈도우 그래픽을위한 스택 버전과 같은 것을 얻을 수 있다면.

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); 

, 당신은 string 대신 FractionLabel을 반환하는 당신의 방법을 수정할 수 있습니다.

+0

위대한 직업! 고맙습니다. –