Mschart y轴最小/最大设置问题(可能的故障?)c#

本文关键字:故障 问题 设置 Mschart | 更新日期: 2023-09-27 18:04:43

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

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

GetRoundYAxisMax方法只返回一个"整数"值。下面的代码。

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轴上的最大值或最小值时,它将设置一个非常接近它的值,但不是舍入的。

知道为什么会这样吗?

Mschart y轴最小/最大设置问题(可能的故障?)c#

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

只是回答为什么是10.024999618530273而不是10.025。计算机上没有任何东西的精度是无限的。你有(IIRC) 80位来表示你的号码。一部分是指数部分是尾数。实际情况是,10.025并不是一个在位数中有完美表示的数字。你得到的不是整条数轴,而是整条数轴上的积分。(随机取80位双精度。这是数轴上的一点。现在,将最小的增量添加到可能的80位双精度。直线上的另一个点。现在,在"真实"(双关语)的世界里,有无数的真实点。您试图在现实世界数轴上表示的直线上的任何点都将在80位世界中表示为绑定该点的两个点之一)。