Я использую платформу 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 ответа
Вы можете создать свои собственные маркеры. Для простоты вы можете 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
< Сильный > Результат
Устройство форматирования чисел вернет двузначную дробь, если их больше двух, в противном случае он вернет те же цифры дробной части, что и у числа. Например, см. Выходные данные ниже,
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")
Похожие вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.