在图表标签asp.net中格式化数字

时间:2018-12-16 09:57:33

标签: asp.net

下面正确绑定了图,但是值是以数字表示的,我们希望以百万计的形式显示,例如250M,200M(如果以百万为单位的值),否则以100k(如果以千为单位的值)显示...参见下文< / p>

  Chart3.DataSource = dt11;
    Chart3.ChartAreas["ChartArea3"].AxisX.MajorGrid.LineWidth = 0;
    Chart3.ChartAreas["ChartArea3"].AxisY.LineWidth = 0;
    Chart3.Series["Series1"].YValueMembers = "Amount";
    Chart3.Series["Series1"].XValueMember = "Acquisition";
    Chart3.DataBind();

enter image description here

1 个答案:

答案 0 :(得分:0)

您可以根据需要使用LabelStyle.Format属性设置Y轴数字刻度的格式:

// for numbers up to 1 milion
Chart3.ChartAreas["ChartArea3"].AxisY.LabelStyle.Format = "#,##0,k";

// for numbers more than 1 milion & less than 1 billion
Chart3.ChartAreas["ChartArea3"].AxisY.LabelStyle.Format = "#,##0,,M";

上面的代码中使用的技术称为{em>数字缩放说明符,基于this reference

  

数字缩放说明符:如果指定了一个或多个逗号   紧接在显式或隐式小数点左侧的   每个逗号将要格式化的数字除以1000。例如,   如果使用字符串“ 0 ,,”格式化数字1亿,则   输出为“ 100”。

另外,要强制执行所需的格式,可以先使用if-condition条件检查序列的最大值,然后将最大比例设置为图表的AxisY.Maximum属性:

// assumed dt11 is a DataTable,
// use Compute() method with Max() function to get maximum value of the series
var maxValue = Convert.ToInt32(dt11.Compute("Max([Amount])", string.Empty));
double maxScale;

if (maxValue < 1000000)
{
    Chart3.ChartAreas["ChartArea3"].AxisY.LabelStyle.Format = "#,##0,k";

    // set maximum scale to the nearest interval by 500,000
    maxScale = Math.Ceiling(Convert.ToDouble(maxValue) / 500000d) * 500000;
}
else if (maxValue >= 1000000 && maxValue < 1000000000)
{
    Chart3.ChartAreas["ChartArea3"].AxisY.LabelStyle.Format = "#,##0,,M";

    // set maximum scale to the nearest interval by 5 million
    maxScale = Math.Ceiling(Convert.ToDouble(maxValue) / 5000000d) * 5000000;
}
// other conditions

// set maximum scale
Chart3.ChartAreas["ChartArea3"].AxisY.Maximum = maxScale;