You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 00:33:33