Swift中DGCharts的PieChartView无法显示百分比符号问题
解决DGCharts PieChartView百分比符号不显示问题
问题出在NumberFormatter的配置逻辑和格式化器的设置优先级上,以下是针对性修复方案:
核心问题分析
当使用NumberFormatter.Style.percent时,默认会将数值乘以100生成百分比文本。比如:
- 数值为
0.3时,会输出30% - 但如果你的数值本身是整数(如
30代表30%),直接用这个样式会输出3000%,完全不符合预期。同时重复设置格式化器也可能导致冲突。
解决方案一:适配整数类型的百分比数值(如30=30%)
跳过percent样式的自动转换,直接自定义格式字符串添加%符号:
// 3. Set ChartData部分修改如下 let pieChartData = PieChartData(dataSet: pieChartDataSet) let format = NumberFormatter() format.maximumFractionDigits = 0 // 自定义格式,在整数后直接拼接%符号 format.positiveFormat = "#,##0%" format.zeroSymbol = "" let formatter = DefaultValueFormatter(formatter: format) // 直接设置DataSet的valueFormatter,优先级高于ChartData的设置 pieChartDataSet.valueFormatter = formatter
解决方案二:适配小数类型的百分比数值(如0.3=30%)
如果你的数值是小数形式,调整配置确保百分比符号正常显示,同时避免重复设置:
// 3. Set ChartData部分修改如下 let pieChartData = PieChartData(dataSet: pieChartDataSet) let format = NumberFormatter() format.numberStyle = .percent format.maximumFractionDigits = 0 format.multiplier = 1.0 // 小数数值下,1.0的multiplier会正确转换为百分比 format.percentSymbol = "%" format.zeroSymbol = "" let formatter = DefaultValueFormatter(formatter: format) pieChartDataSet.valueFormatter = formatter
额外注意点
- 无需同时设置
pieChartData.setValueFormatter和pieChartDataSet.valueFormatter,DataSet的格式化器优先级更高,直接设置DataSet的即可。 - 确认
values数组中的数值类型与所选方案匹配,避免转换逻辑错误。
内容的提问来源于stack exchange,提问作者I Don't Tell
相关产品推荐
相关产品推荐

