新AQI算法 之前算法错误

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace AQINEW
{
    public class NewAQI
    {
        #region 浓度标准及aqi标准
        //中国浓度标准SO2
        int[] BPSO2 = new int[] { 0, 150, 500, 650, 800, 1600, 2100, 2620 };
        //中国浓度标准NO2
        int[] BPNO2 = new int[] { 0, 100, 200, 700, 1200, 2340, 3090, 3840 };
        //中国浓度标准PM25
        int[] BPPM25 = new int[] { 0, 35, 75, 115, 150, 250, 350, 500 };
//中国浓度标准CO
        int[] BPCO = new int[] { 0, 5, 10, 35, 60, 90, 120, 150 };
        //中国浓度标准O3
        int[] BPO3 = new int[] { 0, 160, 200, 300, 400, 800, 1000, 1200 };
        //中国浓度标准PM10
        int[] BPPM10 = new int[] { 0, 50, 150, 250, 350, 420, 500, 600 };
//中国AQI标准
        int[] IAQI = new int[] { 0, 50, 100, 150, 200, 300, 400, 500 };
        #endregion


        int IAQIH, IAQIL, BPH, BPL;
        public int GetIAQI(double CP, string ElementName)
        {
            int currentCP = Convert.ToInt32(CP);
            getRangle(CP, ElementName);
            double chu = Convert.ToDouble(IAQIH - IAQIL) / Convert.ToDouble(BPH - BPL);
            int CurrentAqi = Convert.ToInt32(chu * (currentCP - BPL) + IAQIL);
            return Convert.ToInt32(CurrentAqi);
        }

        int[] NongDu;
        /// <summary>
        /// 测量范围判定
        /// </summary>
        /// <param name="Element"></param>
        private void getRangle(double CP, string Element)
        {
            //浓度范围

            switch (Element)
            {
                case "SO2":
                    NongDu = BPSO2;
                    break;
                case "NO2":
                    NongDu = BPNO2;
                    break;
                case "PM25":
                    NongDu = BPPM25;
                    break;
                case "CO":
                    NongDu = BPCO;
                    break;
                case "O3":
                    NongDu = BPO3;
                    break;
                case "PM10":
                    NongDu = BPPM10;
                    break;
            }

            //AQI范围 
            for (int i = 0; i < NongDu.Length - 1; i++)
            {
                if (CP >= NongDu[i] && CP <= NongDu[i + 1])
                {
                    IAQIH = IAQI[i + 1];
                    IAQIL = IAQI[i];
                    BPH = NongDu[i + 1];
                    BPL = NongDu[i];
                    break;
                }
            }
        }



        Dictionary<string, string> mydic = new Dictionary<string, string>();
        /// <summary>
        /// 获取首要污染物 以及首要污染物的值
        /// </summary>
        /// <returns></returns>
        public string GetMaxWuranwu(Dictionary<string, string> dic)
        {
            Dictionary<string, int> mydicNew = new Dictionary<string, int>();
            //循环
            foreach (KeyValuePair<string, string> item in dic)
            {
                int Current = GetIAQI(Convert.ToDouble(item.Value), item.Key);
                mydicNew.Add(item.Key, Current);
            }
            int Num = 0;
            string Shouyao = "";
            foreach (KeyValuePair<string, int> item in mydicNew)
            {
                int AqiNUM = Convert.ToInt32(item.Value);
                if (AqiNUM > Num)
                {
                    Num = AqiNUM;
                    Shouyao = item.Key;
                }
            }

            return Shouyao + "," + Num;
        }







    }
}
0, 35, 75, 115, 150, 250, 350, 500
原文地址:https://www.cnblogs.com/lierjie/p/5068933.html