iOS图表框架maximumFractionDigits无法正常工作

时间:2018-10-24 02:47:41

标签: ios swift xcode ios-charts

我正在使用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。

enter image description here 请建议我我在做什么错了?

谢谢

2 个答案:

答案 0 :(得分:2)

您可以创建自定义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

结果

enter image description here

答案 1 :(得分:0)

如果有2个以上的小数位数,则数字格式化程序将返回2位数的小数位数,否则将返回该数字具有的相同小数位数。例如,请参见以下输出,

let leftAxisFormatter = NumberFormatter()
leftAxisFormatter.minimumFractionDigits = 0
leftAxisFormatter.maximumFractionDigits = 2
leftAxisFormatter.positivePrefix = "$"

let number = 82.2343
print(leftAxisFormatter.string(for: number))

Optional("$82.23")

let number = 82
print(leftAxisFormatter.string(for: number))
Optional("$82")

let number = 82.1
print(leftAxisFormatter.string(for: number))
Optional("$82.1")

因此,如果您始终希望获得2位数的分数,则只需将最小值设置为2,

leftAxisFormatter.minimumFractionDigits = 2

现在所有输出将是2位,如下所示,

Optional("$82.23")
Optional("$82.00")
Optional("$82.10")