iOS 图表框架 maximumFractionDigits 不工作
iOS Charts framework maximumFractionDigits not working
我正在使用 iOS Charts
框架在我的应用程序上显示条形图。
我的leftAxisFormatter
是这样的
let leftAxisFormatter = NumberFormatter()
leftAxisFormatter.minimumFractionDigits = 0
leftAxisFormatter.maximumFractionDigits = 2
leftAxisFormatter.positivePrefix = "$"
我的数据集是这样的
0 : ChartDataEntry, x: 0.0, y 0.0
1 : ChartDataEntry, x: 1.0, y 7.6
2 : ChartDataEntry, x: 2.0, y 0.0
3 : ChartDataEntry, x: 3.0, y 0.0
4 : ChartDataEntry, x: 4.0, y 48.07
5 : ChartDataEntry, x: 5.0, y 107.26
6 : ChartDataEntry, x: 6.0, y 0.0
我正在使用 BalloonMarker
显示值 当我从图表中点击一个条形但标记中的值始终只显示一个小数位时,我尝试使用 NumberFormatter
但没有成功。
请参考下面的屏幕截图,其中我想显示标记中显示的值的 2 个小数位,根据我的数据集,这里应该是 107.26。
请告诉我我做错了什么?
谢谢
如果有超过 2 个小数位,您的数字格式化程序将 return 2 位小数,否则它将 return 与该数字相同的小数位。例如,查看以下输出,
let leftAxisFormatter = NumberFormatter()
leftAxisFormatter.minimumFractionDigits = 0
leftAxisFormatter.maximumFractionDigits = 2
leftAxisFormatter.positivePrefix = "$"
let number = 82.2343
print(leftAxisFormatter.string(for: number))
Optional(".23")
let number = 82
print(leftAxisFormatter.string(for: number))
Optional("")
let number = 82.1
print(leftAxisFormatter.string(for: number))
Optional(".1")
所以,如果你总是想得到 2 位数的分数,那么只需将最小值设置为 2,
leftAxisFormatter.minimumFractionDigits = 2
现在所有的输出都是2位数字,如下所示,
Optional(".23")
Optional(".00")
Optional(".10")
您可以创建自定义 Markers。为简单起见,您可以 subClass
BalloonMarker
并覆盖 setLabel
以在传递给 super's
setLabel
,
之前格式化值
class MyCustomBaloon: BalloonMarker {
override func setLabel(_ newLabel: String) {
let value = String(format: "$%.2f", Double(newLabel) ?? 0.0)
super.setLabel(value)
}
}
用法
let marker = MyCustomBaloon(color: UIColor(white: 180/255, alpha: 1),
font: .systemFont(ofSize: 12),
textColor: .white,
insets: UIEdgeInsets(top: 8, left: 8, bottom: 20, right: 8))
marker.chartView = chartView
marker.minimumSize = CGSize(width: 80, height: 40)
chartView.marker = marker
结果
我正在使用 iOS Charts
框架在我的应用程序上显示条形图。
我的leftAxisFormatter
是这样的
let leftAxisFormatter = NumberFormatter()
leftAxisFormatter.minimumFractionDigits = 0
leftAxisFormatter.maximumFractionDigits = 2
leftAxisFormatter.positivePrefix = "$"
我的数据集是这样的
0 : ChartDataEntry, x: 0.0, y 0.0
1 : ChartDataEntry, x: 1.0, y 7.6
2 : ChartDataEntry, x: 2.0, y 0.0
3 : ChartDataEntry, x: 3.0, y 0.0
4 : ChartDataEntry, x: 4.0, y 48.07
5 : ChartDataEntry, x: 5.0, y 107.26
6 : ChartDataEntry, x: 6.0, y 0.0
我正在使用 BalloonMarker
显示值 当我从图表中点击一个条形但标记中的值始终只显示一个小数位时,我尝试使用 NumberFormatter
但没有成功。
请参考下面的屏幕截图,其中我想显示标记中显示的值的 2 个小数位,根据我的数据集,这里应该是 107.26。
谢谢
如果有超过 2 个小数位,您的数字格式化程序将 return 2 位小数,否则它将 return 与该数字相同的小数位。例如,查看以下输出,
let leftAxisFormatter = NumberFormatter()
leftAxisFormatter.minimumFractionDigits = 0
leftAxisFormatter.maximumFractionDigits = 2
leftAxisFormatter.positivePrefix = "$"
let number = 82.2343
print(leftAxisFormatter.string(for: number))
Optional(".23")
let number = 82
print(leftAxisFormatter.string(for: number))
Optional("")
let number = 82.1
print(leftAxisFormatter.string(for: number))
Optional(".1")
所以,如果你总是想得到 2 位数的分数,那么只需将最小值设置为 2,
leftAxisFormatter.minimumFractionDigits = 2
现在所有的输出都是2位数字,如下所示,
Optional(".23")
Optional(".00")
Optional(".10")
您可以创建自定义 Markers。为简单起见,您可以 subClass
BalloonMarker
并覆盖 setLabel
以在传递给 super's
setLabel
,
class MyCustomBaloon: BalloonMarker {
override func setLabel(_ newLabel: String) {
let value = String(format: "$%.2f", Double(newLabel) ?? 0.0)
super.setLabel(value)
}
}
用法
let marker = MyCustomBaloon(color: UIColor(white: 180/255, alpha: 1),
font: .systemFont(ofSize: 12),
textColor: .white,
insets: UIEdgeInsets(top: 8, left: 8, bottom: 20, right: 8))
marker.chartView = chartView
marker.minimumSize = CGSize(width: 80, height: 40)
chartView.marker = marker
结果