mschart y轴最小/最大设置问题(可能出现故障?)C#

时间:2013-03-18 16:31:03

标签: c# axis mschart max

我在设置mschart的y轴的最大值和最小值时遇到问题。 将max或min设置为某个值(例如10.025)时,图表设置为max的值为10.024999618530273。

mainChart.ChartAreas[selectedChartArea].AxisY.Maximum = GetRoundYAxisMax(newYMax, newYRange);
mainChart.ChartAreas[selectedChartArea].AxisY.Minimum = GetRoundYAxisMin(newYMin, newYRange);

GetRoundYAxisMax方法只返回一个“round”值。代码如下。

private float GetRoundYAxisMax(double calculatedMax, double yAxisRange)
        {
            double rangeFactor = 0;

            if (yAxisRange > 10)
                rangeFactor = 1;
            else if (yAxisRange > 1)
                rangeFactor = 4;
            else if (yAxisRange > 0.1)
                rangeFactor = 40;
            else if (yAxisRange > 0.01)
                rangeFactor = 400;
            else if (yAxisRange > 0.001)
                rangeFactor = 4000;
            else if (yAxisRange > 0.0001)
                rangeFactor = 40000;
            else
                rangeFactor = 400000;

            float returnValue = (float)(Math.Round(calculatedMax * rangeFactor, MidpointRounding.ToEven) / rangeFactor);
            return returnValue;
        }

舍入代码正确评估并返回正确舍入的值,但是当将此值设置为y轴上的最大值或最小值时,它会设置一个非常接近它的值,但不会舍入。

为什么会发生这种情况?

2 个答案:

答案 0 :(得分:1)

您可以设置轴标签样式以舍入未舍入的值: mainChart.ChartAreas[selectedChartArea].AxisY.LabelStyle.Format = "#.###";

答案 1 :(得分:0)

回答为什么10.024999618530273而不是10.025。 计算机上的任何东西都没有精确的无限。您有(IIRC)80位来表示您的号码。部分是指数部分是尾数。发生的事情是10.025不是一个在该位数上具有完美表示的数字。你没有获得整数线,你会得到整数。 (取一个随机的80位双。这是数字线上的一个点。现在,将最小的增量添加到可能的80位双倍。线上的另一点。现在,在“真实”(双关语)世界,有一个无数个真实点。你试图在真实世界数字线上表示的线上的任何点将表示为在80位世界中限制该点的两个点之一)。