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

结果