mirror of
https://github.com/XCharts-Team/XCharts.git
synced 2026-05-29 20:58:47 +00:00
优化Axis的MinMax类型范围计算
This commit is contained in:
@@ -66,6 +66,8 @@ slug: /changelog
|
||||
|
||||
## master
|
||||
|
||||
* (2023.05.04) 优化`Axis`在-1到1范围时设置`CeilRate`不生效的问题
|
||||
* (2023.05.04) 优化`Axis`的`MinMax`类型范围计算
|
||||
* (2023.05.04) 修复`AxisLabel`在数据都是小于1的浮点数时显示`Label`格式不对的问题
|
||||
* (2023.05.04) 修复`Theme`在修改默认主题的参数后运行被重置的问题
|
||||
* (2023.05.04) 增加`Symbol`选择`Custom`类型时的`Warning`提示
|
||||
|
||||
@@ -394,8 +394,8 @@ namespace XCharts.Runtime
|
||||
|
||||
case Axis.AxisMinMaxType.MinMax:
|
||||
|
||||
minValue = ceilRate != 0 ? ChartHelper.GetMinDivisibleValue(minValue, ceilRate) : minValue;
|
||||
maxValue = ceilRate != 0 ? ChartHelper.GetMaxDivisibleValue(maxValue, ceilRate) : maxValue;
|
||||
minValue = needFormat ? ChartHelper.GetMinDivisibleValue(minValue, ceilRate) : minValue;
|
||||
maxValue = needFormat ? ChartHelper.GetMaxDivisibleValue(maxValue, ceilRate) : maxValue;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -347,9 +347,13 @@ namespace XCharts.Runtime
|
||||
public virtual string GetFormatterContent(int labelIndex, double value, double minValue, double maxValue, bool isLog = false)
|
||||
{
|
||||
var newNumericFormatter = numericFormatter;
|
||||
if (string.IsNullOrEmpty(newNumericFormatter) && !isLog)
|
||||
if (value == 0)
|
||||
{
|
||||
newNumericFormatter = MathUtil.IsInteger(maxValue) ? "0" : "f" + MathUtil.GetPrecision(maxValue);
|
||||
newNumericFormatter = "f0";
|
||||
}
|
||||
else if (string.IsNullOrEmpty(newNumericFormatter) && !isLog)
|
||||
{
|
||||
newNumericFormatter = MathUtil.IsInteger(maxValue) ? "f0" : "f" + MathUtil.GetPrecision(maxValue);
|
||||
}
|
||||
if (string.IsNullOrEmpty(m_Formatter))
|
||||
{
|
||||
|
||||
@@ -692,8 +692,9 @@ namespace XCharts.Runtime
|
||||
intvalue = (int)(max * Mathf.Pow(10, count));
|
||||
}
|
||||
var pow = Mathf.Pow(10, count);
|
||||
if (max > 0) return (int) ((max * pow + 1)) / pow;
|
||||
else return (int) ((max * pow - 1)) / pow;
|
||||
var value = (max > 0) ? (int)((max * pow + 1)) / pow :
|
||||
(int)((max * pow - 1)) / pow;
|
||||
return GetMaxCeilRate(value, ceilRate);
|
||||
}
|
||||
if (ceilRate == 0)
|
||||
{
|
||||
@@ -723,12 +724,26 @@ namespace XCharts.Runtime
|
||||
}
|
||||
else
|
||||
{
|
||||
var mod = max % ceilRate;
|
||||
int rate = (int) (max / ceilRate);
|
||||
return mod == 0 ? max : (max < 0 ? rate : rate + 1) * ceilRate;
|
||||
return GetMaxCeilRate(max, ceilRate);
|
||||
}
|
||||
}
|
||||
|
||||
public static double GetMaxCeilRate(double value, double ceilRate)
|
||||
{
|
||||
if (ceilRate == 0) return value;
|
||||
var mod = value % ceilRate;
|
||||
int rate = (int)(value / ceilRate);
|
||||
return mod == 0 ? value : (value < 0 ? rate : rate + 1) * ceilRate;
|
||||
}
|
||||
|
||||
public static double GetMinCeilRate(double value, double ceilRate)
|
||||
{
|
||||
if (ceilRate == 0) return value;
|
||||
var mod = value % ceilRate;
|
||||
int rate = (int)(value / ceilRate);
|
||||
return mod == 0 ? value : (value < 0 ? rate - 1 : rate) * ceilRate;
|
||||
}
|
||||
|
||||
public static double GetMinDivisibleValue(double min, double ceilRate)
|
||||
{
|
||||
if (min == 0) return 0;
|
||||
@@ -742,8 +757,9 @@ namespace XCharts.Runtime
|
||||
intvalue = (int)(min * Mathf.Pow(10, count));
|
||||
}
|
||||
var pow = Mathf.Pow(10, count);
|
||||
if (min > 0) return (int) ((min * pow + 1)) / pow;
|
||||
else return (int) ((min * pow - 1)) / pow;
|
||||
var value = (min > 0) ? (int)((min * pow + 1)) / pow :
|
||||
(int)((min * pow - 1)) / pow;
|
||||
return GetMinCeilRate(value, ceilRate);
|
||||
}
|
||||
if (ceilRate == 0)
|
||||
{
|
||||
@@ -764,9 +780,7 @@ namespace XCharts.Runtime
|
||||
}
|
||||
else
|
||||
{
|
||||
var mod = min % ceilRate;
|
||||
int rate = (int) (min / ceilRate);
|
||||
return mod == 0 ? min : (min < 0 ? rate - 1 : rate) * ceilRate;
|
||||
return GetMinCeilRate(min, ceilRate);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -810,8 +824,6 @@ namespace XCharts.Runtime
|
||||
return min;
|
||||
}
|
||||
|
||||
|
||||
|
||||
public static void AddEventListener(GameObject obj, EventTriggerType type,
|
||||
UnityEngine.Events.UnityAction<BaseEventData> call)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user