NUMBEO

About Climate Indices At This Website

Climate Index is an estimation of the climate likability of a given city or a country. It is in the range [-100, +100] (higher is better). Cities with climate index 100 have moderate temperatures and low humidity and no other major weather condition which is usually not preferred by most people. However, some persons prefer colder climate while others prefer warmer climates and some people are fine with humid conditions, so this index is general guidance, which shall not be blindly considered.

Actual formulas to calculate this index is subject to change. The current formula uses dew point and temperature (and estimated avg. high humidex using those two numbers) to estimate a climate index. This formula as written in Java programming language is as follows:

  public double getHumidex() {
    return temp_high_avg + 0.5555 * (6.1 * Math.exp(5417.7530 * (1 / 273.16 - 1 / (dewpoint_high_avg + 273.15))) - 10);
  }
  
  public double getRanking() {
    //first it is calculated in range [-30, 30] then multiplied 
    double base = 30;
    if (dewpoint_low_avg < 10) {
      base -= Math.pow(0.25 * (10 - dewpoint_low_avg), 1.2);
    }

    //26 Severely high. Even deadly for asthma related illnesses
    //24 Extremely uncomfortable, fairly oppressive	
    //21 Very humid, quite uncomfortable
    //18 Somewhat uncomfortable for most people at upper edge	
    if (dewpoint_high_avg > 18) {
      base -= Math.pow( (dewpoint_high_avg - 18), 1.2);  // 10^1.2 = 15.8
    }

    //http://courses.washington.edu/me333afe/Comfort_Health.pdf
    //37.7 very uncomfortable
    //32 uncomfortable
    //12 uncomfortable
    //0 very uncomfortable
    if (temp_high_avg > 31) {
      base -= Math.pow(temp_high_avg - 31, 1.5);  // 10 ^ 1.4 = 25, 10 ^ 1.5 = 31.6
    }
    
    if (temp_low_avg < 8) {
      base -= Math.pow( (8 - temp_low_avg) / 2, 1.55); // -20c, 30/2=15 , 15 ^ 1.6 = 76
    }
    
    double humidex = getHumidex();
    //humindex > 31 yellow
    //humindex > 40 orange
    //humindex > 46 red
    if (humidex > 31) {
      base -= (humidex - 31) / 4.0;
    }
    if (base < -30) {
      base = -30.0;
    }
    if (base > 30) {
      base = 30.0;
    }
    base = base * 100 / 30.0;
    return base;

Climate index formulas used in the past

Formula used before June 2017

This formula was challenged in Quora and people didn't like it because it gives scores below 0 for Bangkok and Singapore. Most people think the climate in those cities is not that bad, and that was the reason why made a new formula.
  public double getRanking() {
    //first it is calculated in range [-30, 30] then multiplied 
    double base = 30;
    if (dewpoint_low_avg < 10) {
      base -= Math.pow(0.25 * (10 - dewpoint_low_avg), 1.2);
    }

    //26 Severely high. Even deadly for asthma related illnesses
    //24 Extremely uncomfortable, fairly oppressive	
    //21 Very humid, quite uncomfortable
    //18 Somewhat uncomfortable for most people at upper edge	
    if (dewpoint_high_avg > 16) {
      base -= Math.pow(dewpoint_high_avg - 16, 1.47);  // 10^1.5 = 31.11
    }
    

    //http://courses.washington.edu/me333afe/Comfort_Health.pdf
    //37.7 very uncomfortable
    //32 uncomfortable
    //12 uncomfortable
    //0 very uncomfortable
    if (temp_high_avg > 30) {
      base -= Math.pow(temp_high_avg - 30, 1.4);  // 10 ^ 1.4 = 25.11
    }
    
    if (temp_low_avg < 5) {
      base -= Math.pow( (5 - temp_low_avg) / 2, 1.35); // 10 ^ 1.35 = 22.00
    }
    
    if (chanceofthunderday > 40) {
      base -= (chanceofthunderday - 25) / 7;
    }
    if (chanceoftornadoday > 1) {
      base -= chanceoftornadoday * 2;
    }
    if (chanceofrainday > 40) {
      base -= (chanceofrainday - 25) / 7;
    }
    if (chanceofcloudyday > 50) {
      base -= (chanceofcloudyday - 25) / 7;
    }
    if (chanceoffogday > 30) {
      base -= (chanceoffogday - 15) / 5;
    }
    if (base < -30) {
      base = -30.0;
    }
    base *= 100 / 30.0;
    return base;
  }