我是编程的新手,我正在尝试编写一个可以计算百分比的程序,然后根据结果显示格式化的答案。
if(percent % 1 == 0.0)
{
sw.Write(" {0}%", (int)percent);
}
else
{
sw.Write((" {0:f1}%", percent);
在这种情况下,百分比值分别为11,14,12,6和4.除了14之外,它显示为整数,但是14显示为14.0。如果我观察百分比数字将会出现11.0 12.0等,但是14则为14.000000000000004,因此显示不正确。这是一些怪癖还是我只是没有正确编程?关心巴里
答案 0 :(得分:1)
您不应使用operator ==
比较浮动值。
我发布了一些代码here,说明了应该如何完成。
修改强>
一个完整的例子:
class Program
{
static double epsilon = 0.000001;
static bool DoubleEquals(double value1, double value2)
{
return Math.Abs(value1 - value2) < epsilon;
}
static void Print(double percent, TextWriter sw)
{
if (DoubleEquals(percent % 1, .0))
{
sw.Write(" {0}%", (int)percent);
}
else
{
sw.Write(" {0:f1}%", percent);
}
}
public static void Main(string[] args)
{
Print(11.0, Console.Out);
Print(14.000000000000004, Console.Out);
Print(12.0, Console.Out);
Print(6.0, Console.Out);
Print(4.0, Console.Out);
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
当然,您必须将epsilon
调整为足够小的值。
答案 1 :(得分:0)
如果您在固定小数位后,请尝试以下方法:
sw.Write(string.Format("{0:0.00}", percent));