簡體   English   中英

Mschart y軸最小/最大設置問題(可能出現毛刺?)C#

[英]mschart y-axis min / max setting issue (possible glitch?) C#

我在為mschart的y軸設置最大值和最小值時遇到問題。 將最大值或最小值設置為某個值(例如10.025)時,圖表設置為最大值的值為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軸上的最大值或最小值時,會設置一個非常接近的值,但不會舍入。

任何想法為什么會這樣?

您可以將軸標簽樣式設置為舍入未舍入的值: mainChart.ChartAreas[selectedChartArea].AxisY.LabelStyle.Format = "#.###";

只是回答為什么10.024999618530273而不是10.025。 計算機上沒有什么是無限的精度。 您有(IIRC)80位代表您的電話號碼。 部分是指數部分是尾數。 發生的事情是,10.025並不是以該位數完美表示的數字。 您沒有得到完整的數字線,沿其得到了整數標記。 (取一個隨機的80位double。這是數字行上的一個點。現在,將最小的增量添加到該80位double可能的位置。行上的另一個點。現在,在“真實”(雙關語)世界中,存在無限數量的實點。您嘗試在真實世界數字線上表示的線上的任何點都將表示為在80位世界中限制該點的兩個點之一。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM