Я использую платформу 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 в соответствии с моим набором данных.

введите описание изображения здесь Подскажите, пожалуйста, что я делаю не так?

Спасибо

1
Paras Gorasiya 24 Окт 2018 в 05:47

2 ответа

Лучший ответ

Вы можете создать свои собственные маркеры. Для простоты вы можете 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

2
Kamran 24 Окт 2018 в 10:37

Устройство форматирования чисел вернет двузначную дробь, если их больше двух, в противном случае он вернет те же цифры дробной части, что и у числа. Например, см. Выходные данные ниже,

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, как,

leftAxisFormatter.minimumFractionDigits = 2

Теперь все выходы будут двухзначными, как показано ниже,

Optional("$82.23")
Optional("$82.00")
Optional("$82.10")
0
Kamran 24 Окт 2018 в 09:26
52960397