[英]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.