diff --git a/Runtime/Component/Main/Axis.cs b/Runtime/Component/Main/Axis.cs index 17f71c2d..d5b4be8b 100644 --- a/Runtime/Component/Main/Axis.cs +++ b/Runtime/Component/Main/Axis.cs @@ -95,8 +95,8 @@ namespace XCharts [SerializeField] protected bool m_Show = true; [SerializeField] protected AxisType m_Type; [SerializeField] protected AxisMinMaxType m_MinMaxType; - [SerializeField] protected int m_Min; - [SerializeField] protected int m_Max; + [SerializeField] protected float m_Min; + [SerializeField] protected float m_Max; [SerializeField] protected int m_SplitNumber = 5; [SerializeField] protected float m_Interval = 0; [SerializeField] protected bool m_ShowSplitLine = false; @@ -132,12 +132,12 @@ namespace XCharts /// The minimun value of axis. /// 设定的坐标轴刻度最小值,当minMaxType为Custom时有效。 /// - public int min { get { return m_Min; } set { m_Min = value; } } + public float min { get { return m_Min; } set { m_Min = value; } } /// /// The maximum value of axis. /// 设定的坐标轴刻度最大值,当minMaxType为Custom时有效。 /// - public int max { get { return m_Max; } set { m_Max = value; } } + public float max { get { return m_Max; } set { m_Max = value; } } /// /// Number of segments that the axis is split into. /// 坐标轴的分割段数。 @@ -456,7 +456,7 @@ namespace XCharts value = (minValue + (maxValue - minValue) * index / (split - 1)); } if (forcePercent) return string.Format("{0}%", (int)value); - else return m_AxisLabel.GetFormatterContent(value); + else return m_AxisLabel.GetFormatterContent(value, minValue, maxValue); } var showData = GetDataList(dataZoom); int dataCount = showData.Count; @@ -583,7 +583,7 @@ namespace XCharts /// /// /// - public void AdjustMinMaxValue(ref int minValue, ref int maxValue) + public void AdjustMinMaxValue(ref float minValue, ref float maxValue) { if (minMaxType == Axis.AxisMinMaxType.Custom) { @@ -655,6 +655,8 @@ namespace XCharts m_AxisLabel.Equals(other.axisLabel) && splitLineType == other.splitLineType && boundaryGap == other.boundaryGap && + minValue == other.minValue && + maxValue == other.maxValue && axisName.Equals(other.axisName) && ChartHelper.IsValueEqualsList(m_Data, other.data); } diff --git a/Runtime/Component/Main/Series.cs b/Runtime/Component/Main/Series.cs index 61b07e6f..72c6cf26 100644 --- a/Runtime/Component/Main/Series.cs +++ b/Runtime/Component/Main/Series.cs @@ -556,7 +556,7 @@ namespace XCharts /// /// public void GetXMinMaxValue(DataZoom dataZoom, int axisIndex, bool isValueAxis, - out int minVaule, out int maxValue) + out float minVaule, out float maxValue) { GetMinMaxValue(dataZoom, axisIndex, isValueAxis, false, out minVaule, out maxValue); } @@ -569,7 +569,7 @@ namespace XCharts /// /// public void GetYMinMaxValue(DataZoom dataZoom, int axisIndex, bool isValueAxis, - out int minVaule, out int maxValue) + out float minVaule, out float maxValue) { GetMinMaxValue(dataZoom, axisIndex, isValueAxis, true, out minVaule, out maxValue); } @@ -577,7 +577,7 @@ namespace XCharts private Dictionary> _stackSeriesForMinMax = new Dictionary>(); private Dictionary _serieTotalValueForMinMax = new Dictionary(); public void GetMinMaxValue(DataZoom dataZoom, int axisIndex, bool isValueAxis, bool yValue, - out int minVaule, out int maxValue) + out float minVaule, out float maxValue) { float min = int.MaxValue; float max = int.MinValue; @@ -593,7 +593,6 @@ namespace XCharts { if (isPercentStack && IsPercentStack(serie.name, SerieType.Bar)) { - Debug.LogError("minmax:" + serie.name); if (100 > max) max = 100; if (0 < min) min = 0; } @@ -665,8 +664,14 @@ namespace XCharts } else { - minVaule = Mathf.FloorToInt(min); - maxValue = Mathf.CeilToInt(max); + if (max > 1) + { + minVaule = Mathf.FloorToInt(min); + maxValue = Mathf.CeilToInt(max); + }else{ + minVaule = min; + maxValue = max; + } } } diff --git a/Runtime/Internal/CoordinateChart.cs b/Runtime/Internal/CoordinateChart.cs index 2b5a0229..20b9c7c4 100644 --- a/Runtime/Internal/CoordinateChart.cs +++ b/Runtime/Internal/CoordinateChart.cs @@ -319,8 +319,8 @@ namespace XCharts if (serieData != null && serieData.highlighted) { sb.Append(key).Append(!string.IsNullOrEmpty(key) ? " : " : ""); - sb.Append("[").Append(ChartCached.FloatToStr(xValue)).Append(",") - .Append(ChartCached.FloatToStr(yValue)).Append("]\n"); + sb.Append("[").Append(ChartCached.FloatToStr(xValue, 0, m_Tooltip.forceENotation)).Append(",") + .Append(ChartCached.FloatToStr(yValue, 0, m_Tooltip.forceENotation)).Append("]\n"); } } else @@ -328,7 +328,7 @@ namespace XCharts sb.Append("\n") .Append("● ") .Append(key).Append(!string.IsNullOrEmpty(key) ? " : " : "") - .Append(ChartCached.FloatToStr(yValue)); + .Append(ChartCached.FloatToStr(yValue,0,m_Tooltip.forceENotation)); } } } @@ -766,8 +766,8 @@ namespace XCharts private void UpdateAxisMinMaxValue(int axisIndex, Axis axis, bool updateChart = true) { if (axis.IsCategory() || !axis.show) return; - int tempMinValue = 0; - int tempMaxValue = 0; + float tempMinValue = 0; + float tempMaxValue = 0; if (IsValue()) { @@ -788,7 +788,6 @@ namespace XCharts if (tempMinValue != axis.minValue || tempMaxValue != axis.maxValue) { m_CheckMinMaxValue = true; - axis.minValue = tempMinValue; axis.maxValue = tempMaxValue; axis.zeroXOffset = 0; @@ -1039,8 +1038,8 @@ namespace XCharts float scaleWid = coordinateWidth / (showData.Count - 1); Vector3 lp = Vector3.zero; Vector3 np = Vector3.zero; - int minValue = 0; - int maxValue = 0; + float minValue = 0; + float maxValue = 0; m_Series.GetYMinMaxValue(null, 0, IsValue(), out minValue, out maxValue); axis.AdjustMinMaxValue(ref minValue, ref maxValue); diff --git a/Runtime/Utility/ChartHelper.cs b/Runtime/Utility/ChartHelper.cs index b7804127..b23f1595 100644 --- a/Runtime/Utility/ChartHelper.cs +++ b/Runtime/Utility/ChartHelper.cs @@ -409,9 +409,21 @@ namespace XCharts return (Color32)color; } - public static int GetMaxDivisibleValue(float max) + public static float GetMaxDivisibleValue(float max) { if (max == 0) return 0; + if (max > -1 && max < 1) + { + int count = 1; + int intvalue = (int)(max * Mathf.Pow(10, count)); + while (intvalue == 0 && count < 12) + { + count++; + intvalue = (int)(max * Mathf.Pow(10, count)); + } + if (max > 0) return 1 / Mathf.Pow(10, count - 1); + else return -1 / Mathf.Pow(10, count); + } int bigger = Mathf.CeilToInt(Mathf.Abs(max)); int n = 1; while (bigger / (Mathf.Pow(10, n)) > 10) @@ -428,9 +440,21 @@ namespace XCharts else return Mathf.CeilToInt(mm); } - public static int GetMinDivisibleValue(float min) + public static float GetMinDivisibleValue(float min) { if (min == 0) return 0; + if (min > -1 && min < 1) + { + int count = 1; + int intvalue = (int)(min * Mathf.Pow(10, count)); + while (intvalue == 0 && count < 12) + { + count++; + intvalue = (int)(min * Mathf.Pow(10, count)); + } + if (min > 0) return 1 / Mathf.Pow(10, count); + else return -1 / Mathf.Pow(10, count - 1); + } int bigger = Mathf.FloorToInt(Mathf.Abs(min)); int n = 1; while (bigger / (Mathf.Pow(10, n)) > 10) @@ -447,6 +471,19 @@ namespace XCharts else return Mathf.FloorToInt(mm); } + public static int GetFloatAccuracy(float value) + { + if (value > 1 || value < -1) return 0; + int count = 1; + int intvalue = (int)(value * Mathf.Pow(10, count)); + while (intvalue == 0 && count < 12) + { + count++; + intvalue = (int)(value * Mathf.Pow(10, count)); + } + return count; + } + public static void AddEventListener(GameObject obj, EventTriggerType type, UnityEngine.Events.UnityAction call) {