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

mschart y轴最小/最大设置问题(可能出现故障?)C#,c#,axis,mschart,max,C#,Axis,Mschart,Max,我在设置mschart y轴的最大值和最小值时遇到问题。 将最大值或最小值设置为某个值(例如10.025)时,图表设置为最大值的值为10.024999618530273 mainChart.ChartAreas[selectedChartArea].AxisY.Maximum = GetRoundYAxisMax(newYMax, newYRange); mainChart.ChartAreas[selectedChartArea].AxisY.Minimum = GetRoundYAxisMi

我在设置mschart y轴的最大值和最小值时遇到问题。 将最大值或最小值设置为某个值(例如10.025)时,图表设置为最大值的值为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轴上将该值设置为最大值或最小值时,它会将一个值设置为非常接近该值,但不舍入


了解发生这种情况的原因吗?

您可以将轴标签样式设置为对未舍入的值进行舍入:
mainChart.ChartAreas[selectedChartArea].AxisY.LabelStyle.Format=“#.###”

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

您可以尝试将chart1.ChartAreas[0].AxisY.LabelStyle.Format=与您的范围一起设置?谢谢@Quantbuff-似乎可以!我只需要根据所需的小数位数更改格式<代码>mainChart.ChartAreas[selectedChartArea].AxisY.LabelStyle.Format=“#.###”