FormatPercent函数处理超100%值时图表系列颜色设置异常求助
问题原因与解决方案
你的问题出在字符串比较和数值比较的逻辑差异上:
FormatPercent() 返回的是带百分号的字符串(比如117%会变成 "117%"),而你在判断时是将这个字符串和 "26"、"90" 做字符串比较。字符串比较是按字符的ASCII顺序逐位对比的,"117%" 的第一个字符是 '1',ASCII码比 "26" 的第一个字符 '2' 小,所以会被判定为小于 "26",从而触发红色的条件。
修复步骤
不要用字符串存储百分比判断值,改用数值类型(比如 Double 或 Decimal)来存储计算后的比例,再基于数值做判断:
- 修改百分比计算逻辑,直接存储小数形式的比例(比如117%对应1.17):
Dim percent As Double Dim actual As Double, projected As Double If Not String.IsNullOrEmpty(dt.Rows(0)("Actual").ToString) And Not String.IsNullOrEmpty(dt.Rows(0)("Projected").ToString) Then actual = CDbl(dt.Rows(0)("Actual")) projected = CDbl(dt.Rows(0)("Projected")) percent = actual / projected ' 得到小数形式的比例,无需格式化 Else percent = -1 ' 用特殊值标记无数据 End If
- 修改颜色判断逻辑,基于数值范围判断:
If percent = -1 Then ' 处理无数据场景,比如设置灰色 itdChart.Series(0).Color = Color.Gray ElseIf percent < 0.25 Then ' 0-25% itdChart.Series(0).Color = Color.Red ElseIf percent < 0.9 Then ' 26%-90% itdChart.Series(0).Color = Color.Yellow Else ' 90%及以上(包括超过100%的情况) itdChart.Series(0).Color = Color.Green End If
额外说明
如果需要在界面上展示百分比字符串,只需要在展示时调用 FormatPercent(percent) 即可,不要用格式化后的字符串做逻辑判断——数值类型的比较才是可靠的。
内容的提问来源于stack exchange,提问作者Connor C.
相关产品推荐
相关产品推荐

