我有一个将小数转换为等效分数的函数。我找到了一些分数,但我似乎无法找到十六分之一(1/16)分数。任何人都有任何建议,我可以在网上看到什么,或者我可以将这三个字符分数转换为一个字符分数。
我在下面有一个位图,显示了16ths分数占据如此多的房地产的地方,与其他看起来不错且很小的分数不同。
我添加了以下用于转换这些分数的函数。
我已经在网上到处检查过,还没有解决这个问题。
如果我可以在此处http://msdn.microsoft.com/en-us/library/ms745109.aspx获得大约四分之三的页面,您将看到数字类型。如果我能得到类似于Windows图形的堆叠版本,那将是一场胜利。
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 :(得分: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
。