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)
{