3

小数を同等の小数に変換する関数があります。いくつかの分数を見つけましたが、16分の1(1/16)の分数が見つからないようです。ネット上のどこを見ることができるか、またはこれらの3文字の小数部を1文字の小数部に変換する方法について、誰かが提案を受け取りました。

下にビットマップがあります。これは、見栄えがよく小さく見える他の分数とは異なり、16n分の1の分数が非常に多くの不動産を占める場所を示しています。

これらの分数を変換するために使用している関数を以下に追加しました。

私はどこでもオンラインでチェックしましたが、これはまだ解決されていません。

ここhttp://msdn.microsoft.com/en-us/library/ms745109.aspxのようなものをページの約4分の3下に取得できれば、数値タイプが表示されます。もし私がウィンドウズグラフィックスのスタックバージョンのようなものを手に入れることができれば、それは勝利でしょう。

ドアの詳細

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;
    }
4

1 に答える 1

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

于 2013-01-09T23:47:30.427 に答える