Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    58

    Problema arrotondamento?

    Salve a tutti


    Mi trovo di fronte ad un problema di cui non riesco a capire il motivo


    In pratica la mia pagina web estrae delle variabili da un file xml generato da un'altra pagina, e tra di esse vi sono anche valori di temperatura, soltanto che nell'xml questa è espressa in Fahrenheit e non in Celsius, e quindi ho provveduto a generare una conversione, che tuttavia mi dà dei valori discordi di qualche decimo. Se invece faccio apparire la temperatura in Fahrenheit vedo il valore giusto.
    A questo punto mi stavo chiedendo se è un problema di arrotondamento


    Per maggiore chiarezza vi metto i codici:


    file xml di partenza


    codice:
     <current_observation xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0" xsi:noNamespaceSchemaLocation="http://www.weather.gov/view/current_observation.xsd">
    <credit>Davis Instruments Corp.</credit>
    <credit_URL>http://www.davisnet.com</credit_URL>
    <image>
    <url>
    http://www.weatherlink.com/images/Logo_Davis_reflxblu.jpg
    </url>
    <title>Davis WeatherLink</title>
    <link>http://www.weatherlink.com</link>
    </image>
    <suggested_pickup>15 minutes after the hour</suggested_pickup>
    <suggested_pickup_period>60</suggested_pickup_period>
    <dewpoint_c>6.1</dewpoint_c>
    <dewpoint_f>43</dewpoint_f>
    <dewpoint_string>43 F (6.1 C)</dewpoint_string>
    <heat_index_c>15.0</heat_index_c>
    <heat_index_f>59</heat_index_f>
    <heat_index_string>59 F (15.0 C)</heat_index_string>
    <latitude>41.825448062796</latitude>
    <location>Roma, RM, Italia</location>
    <longitude>12.477133083343</longitude>
    <observation_time>Last Updated on Oct 30 2014, 7:35 pm CET</observation_time>
    <observation_time_rfc822>Thu, 30 Oct 2014 19:35:05 +0100</observation_time_rfc822>
    <pressure_in>30.109</pressure_in>
    <pressure_mb>1019.6</pressure_mb>
    <pressure_string>1019.6 mb</pressure_string>
    <relative_humidity>52</relative_humidity>
    <station_id>romaeur</station_id>
    <temp_c>16.1</temp_c>
    <temp_f>60.9</temp_f>
    <temperature_string>60.9 F (16.1 C)</temperature_string>
    <wind_degrees>331</wind_degrees>
    <wind_dir>Northwest</wind_dir>
    <wind_kt>2</wind_kt>
    <wind_mph>2</wind_mph>
    <windchill_c>16.1</windchill_c>
    <windchill_f>61</windchill_f>
    <windchill_string>61 F (16.1 C)</windchill_string>
    <davis_current_observation version="1.0">
    <observation_age>54</observation_age>
    <dewpoint_day_high_f>53</dewpoint_day_high_f>
    <dewpoint_day_high_time>12:00am</dewpoint_day_high_time>
    <dewpoint_day_low_f>40</dewpoint_day_low_f>
    <dewpoint_day_low_time>4:16pm</dewpoint_day_low_time>
    <dewpoint_month_high_f>71</dewpoint_month_high_f>
    <dewpoint_month_low_f>30</dewpoint_month_low_f>
    <dewpoint_year_high_f>71</dewpoint_year_high_f>
    <dewpoint_year_low_f>30</dewpoint_year_low_f>
    <heat_index_day_high_f>68</heat_index_day_high_f>
    <heat_index_day_high_time>1:12pm</heat_index_day_high_time>
    <heat_index_month_high_f>85</heat_index_month_high_f>
    <heat_index_year_high_f>85</heat_index_year_high_f>
    <pressure_day_high_in>30.14</pressure_day_high_in>
    <pressure_day_high_time>9:33am</pressure_day_high_time>
    <pressure_day_low_in>30.08</pressure_day_low_in>
    <pressure_day_low_time>3:54pm</pressure_day_low_time>
    <pressure_month_high_in>30.266</pressure_month_high_in>
    <pressure_month_low_in>29.589</pressure_month_low_in>
    <pressure_tendency_string>Rising Slowly</pressure_tendency_string>
    <pressure_year_high_in>30.339</pressure_year_high_in>
    <pressure_year_low_in>29.589</pressure_year_low_in>
    <rain_day_in>0.0000</rain_day_in>
    <rain_month_in>2.3780</rain_month_in>
    <rain_rate_day_high_in_per_hr>0.0000</rain_rate_day_high_in_per_hr>
    <rain_rate_hour_high_in_per_hr>0.0000</rain_rate_hour_high_in_per_hr>
    <rain_rate_in_per_hr>0.0000</rain_rate_in_per_hr>
    <rain_rate_month_high_in_per_hr>10.0787</rain_rate_month_high_in_per_hr>
    <rain_rate_year_high_in_per_hr>10.0787</rain_rate_year_high_in_per_hr>
    <rain_storm_in>0.0236</rain_storm_in>
    <rain_storm_start_date>10/13/2014</rain_storm_start_date>
    <rain_year_in>2.3937</rain_year_in>
    <relative_humidity_day_high>94</relative_humidity_day_high>
    <relative_humidity_day_high_time>12:00am</relative_humidity_day_high_time>
    <relative_humidity_day_low>36</relative_humidity_day_low>
    <relative_humidity_day_low_time>2:30pm</relative_humidity_day_low_time>
    <relative_humidity_in>61</relative_humidity_in>
    <relative_humidity_in_day_high>65</relative_humidity_in_day_high>
    <relative_humidity_in_day_high_time>1:50am</relative_humidity_in_day_high_time>
    <relative_humidity_in_day_low>60</relative_humidity_in_day_low>
    <relative_humidity_in_day_low_time>6:08pm</relative_humidity_in_day_low_time>
    <relative_humidity_in_month_high>78</relative_humidity_in_month_high>
    <relative_humidity_in_month_low>35</relative_humidity_in_month_low>
    <relative_humidity_in_year_high>78</relative_humidity_in_year_high>
    <relative_humidity_in_year_low>35</relative_humidity_in_year_low>
    <relative_humidity_month_high>97</relative_humidity_month_high>
    <station_name>Roma EUR meteo</station_name>
    <sunrise>6:41am</sunrise>
    <sunset>5:08pm</sunset>
    <temp_day_high_f>69.7</temp_day_high_f>
    <temp_day_high_time>2:25pm</temp_day_high_time>
    <temp_day_low_f>51.2</temp_day_low_f>
    <temp_day_low_time>5:10am</temp_day_low_time>
    <temp_in_day_high_f>69.6</temp_in_day_high_f>
    <temp_in_day_high_time>12:00am</temp_in_day_high_time>
    <temp_in_day_low_f>68.3</temp_in_day_low_f>
    <temp_in_day_low_time>1:05pm</temp_in_day_low_time>
    <temp_in_f>69.1</temp_in_f>
    <temp_in_month_high_f>80.7</temp_in_month_high_f>
    <temp_in_month_low_f>68.1</temp_in_month_low_f>
    <temp_in_year_high_f>80.7</temp_in_year_high_f>
    <temp_in_year_low_f>68.1</temp_in_year_low_f>
    <temp_month_high_f>83.6</temp_month_high_f>
    <temp_month_low_f>47.2</temp_month_low_f>
    <temp_year_high_f>83.6</temp_year_high_f>
    <temp_year_low_f>47.2</temp_year_low_f>
    <wind_day_high_mph>17</wind_day_high_mph>
    <wind_day_high_time>4:59pm</wind_day_high_time>
    <wind_month_high_mph>31</wind_month_high_mph>
    <wind_ten_min_avg_mph>3</wind_ten_min_avg_mph>
    <wind_year_high_mph>31</wind_year_high_mph>
    <windchill_day_low_f>51</windchill_day_low_f>
    <windchill_day_low_time>5:04am</windchill_day_low_time>
    <windchill_month_low_f>47</windchill_month_low_f>
    <windchill_year_low_f>47</windchill_year_low_f>
    </davis_current_observation>
    <disclaimer_url>http://www.davisnet.com/about/terms.asp</disclaimer_url>
    <copyright_url>http://www.davisnet.com/about/terms.asp</copyright_url>
    <privacy_policy_url>http://www.davisnet.com/about/privacy.asp</privacy_policy_url>
    <time_to_generate>0.046802997589111</time_to_generate>
    </current_observation>

    Parte della mia pagina web relativa alla definizione delle variabili


    codice:
    <?php
    $url = "http://www.weatherlink.com/xml.php?user=romaeur&pass=*****";
    $ip = @file_get_contents($url);
    $object = simplexml_load_string($ip);
    $davis_current = $cur_obs->davis_current_observation;
    $cur_obs = simplexml_load_string($ip);
    $xml = simplexml_load_file('http://www.weatherlink.com/xml.php?user=romaeur&pass=********');
    
    
    
    
    
    
    #Dati attuali
    foreach($xml->observation_time as $ultimo_aggiornamento);
    foreach($xml->temp_c as $temp);
    foreach($xml->heat_index_c as $heat);
    foreach($xml->relative_humidity as $hum);
    foreach($xml->wind_kt as $velventos);
    $velvento = round($velventos * 1.85,1);
    foreach($xml->wind_dir as $dirvento);
    foreach($xml->wind_degrees as $grvento);
    foreach($xml->pressure_mb as $press);
    foreach($xml->windchill_c as $chill);
    foreach($xml->dewpoint_c as $dew);
    foreach($xml->davis_current_observation->rain_day_in as $precs);
    foreach($xml->davis_current_observation->rain_rate_in_per_hr as $rrates);
    foreach($xml->davis_current_observation->rain_storm_in as $storms);
    foreach($xml->davis_current_observation->rain_rate_hour_high_in_per_hr as $maxrrhs);
    foreach($xml->davis_current_observation->rain_rate_day_high_in_per_hr as $maxrrds);
    $prec = round($precs / 0.039370,1);
    $rrate = round($rrates / 0.039370,1);
    $storm = round($storms / 0.039370,1);
    $maxrrh = round($maxrrhs / 0.039370,1);
    $maxrrd = round($maxrrds / 0.039370,1);
    
    
    
    
    
    
    #Max e Min
    foreach($xml->davis_current_observation->relative_humidity_day_high as $hummax);
    foreach($xml->davis_current_observation->relative_humidity_day_low as $hummin);
    foreach($xml->davis_current_observation->temp_day_low_f as $tminf);
    foreach($xml->davis_current_observation->temp_day_high_f as $tmaxf);
    $tmax = round((5/9) * ($tmaxf - 32),1); 
    $tmin = round((5/9) * ($tminf - 32),1); 
    foreach($xml->davis_current_observation->temp_day_high_time as $tmaxh);
    foreach($xml->davis_current_observation->temp_day_high_f as $max);
    foreach($xml->davis_current_observation->temp_day_low_time as $tminh);
    foreach($xml->davis_current_observation->pressure_day_high_in as $pressmaxin);
    foreach($xml->davis_current_observation->pressure_day_high_time as $pressmaxh);
    foreach($xml->davis_current_observation->pressure_day_low_time as $pressminh);
    foreach($xml->davis_current_observation->pressure_day_low_in as $pressminin);
    $pressmax = round($pressmaxin * 33.86, 1);
    $pressmin = round($pressminin * 33.86, 1);
    foreach($xml->davis_current_observation->relative_humidity_day_low_time as $humminh);
    foreach($xml->davis_current_observation->relative_humidity_day_high_time as $hummaxh);
    foreach($xml->davis_current_observation->wind_day_high_mph as $rafmaxs);
    $rafmax = round($rafmaxs * 1.6,1);
    foreach($xml->davis_current_observation->sunrise as $alba);
    foreach($xml->davis_current_observation->sunset as $tram);
    
    
    
    
    if ($grvento > 348.75 AND $grvento <=11.25) { $grvento = N; }
    if ($grvento > 11.25 AND $grvento <=33.75) { $grvento = NNE; }
    if ($grvento > 33.75 AND $grvento <=56.25) { $grvento = NE; }
    if ($grvento > 56.25 AND $grvento <=78.75 ) { $grvento = ENE; }
    if ($grvento > 78.75 AND $grvento <=101.25 ) { $grvento = E; }
    if ($grvento > 101.25 AND $grvento <=123.75) { $grvento = ESE; }
    if ($grvento > 123.75 AND $grvento <=146.25) { $grvento = SE; }
    if ($grvento > 146.25 AND $grvento <=168.65) { $grvento = SSE; }
    if ($grvento > 168.65 AND $grvento <=191.25) { $grvento = S; }
    if ($grvento > 191.25 AND $grvento <=213.75) { $grvento = SSO; }
    if ($grvento > 213.75 AND $grvento <=236.25) { $grvento = SO; }
    if ($grvento > 236.25 AND $grvento <=258.65) { $grvento = OSO; }
    if ($grvento > 258.65 AND $grvento <=281.25) { $grvento = O; }
    if ($grvento > 281.25 AND $grvento <=303.75) { $grvento = ONO; }
    if ($grvento > 303.75 AND $grvento <=326.25) { $grvento = NO; }
    if ($grvento > 326.25 AND $grvento <=348.75) { $grvento = NNO; }
    if ($grvento > 338 AND $grvento <=360) { $grvento = N; }
    ?>

    In particolare questa è la parte con la conversione:


    codice:
    foreach($xml->davis_current_observation->temp_day_low_f as $tminf);
    foreach($xml->davis_current_observation->temp_day_high_f as $tmaxf);
    $tmax = round((5/9) * ($tmaxf - 32),1); 
    $tmin = round((5/9) * ($tminf - 32),1);
    Vi allego anche un paio di foto

    Mia pagina web


    1.JPG



    Pagina web di partenza che genere l'xml
    2.JPG

  2. #2
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    ho applicato la tua formula a questi valori e mi pare che sia corretto

    codice:
    <heat_index_c>15.0</heat_index_c>
    <heat_index_f>59</heat_index_f>

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    58
    Quote Originariamente inviata da clasku Visualizza il messaggio
    ho applicato la tua formula a questi valori e mi pare che sia corretto

    codice:
    <heat_index_c>15.0</heat_index_c>
    <heat_index_f>59</heat_index_f>
    La formula è per forza quella, solo che nel caso di cui ho parlato mi dà valori non esattamente corretti (9.4°C invece che 9.8°C ad esempio) e non capisco per quale motivo!

  4. #4
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    posta i valori esatti che trovi nel XML nel caso in cui non ti tornano i conti
    io ho il dubbio che siano diversi i Fahrenheit di partenza, non penso possa essere un problema di arrotondamenti (0,4 è veramente troppo come arrotondamento su una semplice divisione)

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    58
    codice:
    <temp_day_high_f>69.5</temp_day_high_f>
    <temp_day_low_f>49.7</temp_day_low_f>
    
    In gradi Celsius corrispondono rispettivamente a 20.8 e 9.8, mentre tramite la conversione mi dà 20.6 e 9.4. Se tolgo la conversione mi restituisce esattamente quei valori lassù in Fahrenheit.

  6. #6
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    prova a eseguire questo script sul tuo server, nei commenti il risultato che ottengo io
    Codice PHP:
    <?php
    function fromFtoC($temp) {
        
    $celsius round(($temp 32) / 1.81);
        echo 
    "F: $temp - C: $celsius\n";
    }
    $temp_1 69.5;
    $temp_2 49.7;


    fromFtoC($temp_1);
    fromFtoC($temp_2);


    // risultato
    // F: 69.5 - C: 20.8
    // F: 49.7 - C: 9.8


    ?>
    Ultima modifica di clasku; 03-11-2014 a 20:15

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    58
    Quote Originariamente inviata da clasku Visualizza il messaggio
    prova a eseguire questo script sul tuo server, nei commenti il risultato che ottengo io
    Codice PHP:
    <?php
    function fromFtoC($temp) {
        
    $celsius round(($temp 32) / 1.81);
        echo 
    "F: $temp - C: $celsius\n";
    }
    $temp_1 69.5;
    $temp_2 49.7;


    fromFtoC($temp_1);
    fromFtoC($temp_2);


    // risultato
    // F: 69.5 - C: 20.8
    // F: 49.7 - C: 9.8


    ?>
    non funziona, mi dà errore

    edit: funziona funziona avevo sbagliato a inserire.
    Comunque mi dà risultato uguale al tuo:
    F: 69.5 - C: 20.8 F: 49.7 - C: 9.8
    Ultima modifica di sheldon; 03-11-2014 a 20:21

  8. #8
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    e che errore?

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    58
    Quote Originariamente inviata da clasku Visualizza il messaggio
    e che errore?
    Ha funzionato, mi ha dato lo stesso tuo risultato

  10. #10
    Utente di HTML.it L'avatar di clasku
    Registrato dal
    Aug 2006
    Messaggi
    3,197
    Ora sarebbe da capire perché il tuo script si comporta diversamente

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.