HighDots Forums  

Somma di due numeri

Javascript (Italian) Il linguaggio JavaScript (it.comp.lang.javascript)


Discuss Somma di due numeri in the Javascript (Italian) forum.



Reply
 
Thread Tools Display Modes
  #1  
Old   
sergio59
 
Posts: n/a

Default Somma di due numeri - 05-07-2008 , 04:33 AM






Salve a tutti.
Ho un problema che mi trascino ormai da due giorni.

Ho un codice che legge da file xml latitudine, longitudine e altezza

<latitude>42.881</latitude>
<longitude>12.96</longitude>
<depth>980</depth>

Faccio l'estrazione del dato tramite le seguenti istruzioni:

latitude=xmlDoc.getElementsByTagName('latitude')
[0].firstChild.data;
longitude=xmlDoc.getElementsByTagName('longitude')
[0].firstChild.data;
depth=xmlDoc.getElementsByTagName('depth')
[0].firstChild.data;

Da questi dati ricavo il punto su google map con

var punto = new GLatLng(latitude,longitude);

Da questa posizione ho la necessità di aumentare il punto di 0.01
(valore numerico così, tanto per provare)

Ho fatto cio in 2 modi:

1)

alert(latitudine+0.01);
alert(longitude+0.01);
alert(depth+0.01);

2)

alert(punto.lat()+0.01);
alert(punto.lng()+0.01);
alert(depth+0.01);

Risultato
nel primo caso ho un concatenamento come se si trattasse di stringhe
su tutti 3 gli alert (- 42.8810.01 - 12.90.01 - 9800.01)
nel secondo caso, alert(punto.lat() +0.01) lo da giusto (42.891)
mentre gli altri due é sempre la concatenazione di due stringhe
(12.960.01 e 9800.01).

Sapete dirmi perché?

Grazie

Sergio

Reply With Quote
  #2  
Old   
Ugo
 
Posts: n/a

Default Re: Somma di due numeri - 05-07-2008 , 04:55 AM






[cut]
Quote:
Sapete dirmi perché?
Sì, perchè in realtà non sono 2 numeri sono una stringa e un numero, e in
JS viene concatenato e convertita in stringa la suddetta operazione a meno
che non si facciano le opportune conversioni, la più furba ed elegante
dovrebbe essere :
alert(+punto.lat()+0.01);
e cioè l'utilizzo dell'operatore unario + che in questo caso converte la
stringa nel numero

Quote:
Grazie
prego


Reply With Quote
  #3  
Old   
ZER0
 
Posts: n/a

Default Re: Somma di due numeri - 05-07-2008 , 05:01 AM



On Wed, 7 May 2008 02:33:12 -0700 (PDT), sergio59 wrote:

Quote:
Salve a tutti.
Ho un problema che mi trascino ormai da due giorni.
Potevi chiedere prima. (o cercare negli archivi del NG)

Quote:
1)

alert(latitudine+0.01);
alert(longitude+0.01);
alert(depth+0.01);
Queste sono tre variabili che contengono stringhe. Il "+" è sia
l'operatore di somma che l'operatore di concatenazione, dipende
se si sta agendo su stringhe o su numeri. Nel tuo caso, essendo
uno degli operandi stringa, l'operatore attua la concatenazione
e non la somma.
Devi quindi prima trasformare le stringhe in numeri, e dato che
t'interessa gestirli come tali, credo ti convenga farlo durante
l'assegnazione:

latitude = +xmlDoc.getElementsByTagName('latitude')
[0].firstChild.data;
longitude = +xmlDoc.getElementsByTagName('longitude')
[0].firstChild.data;
depth = +xmlDoc.getElementsByTagName('depth')
[0].firstChild.data;


Attento, quel "+" non è l'operatore di somma, né l'operatore di
concatenazione.
E' l'operatore unario "+", ed il suo scopo è proprio quello che
interessa a te:

<http://groups.google.it/group/it.comp.lang.javascript/browse_thread/thread/3557c91c093246f3/51942f9cc99b855e#51942f9cc99b855e>

Alternativamente, puoi usare le funzioni:

<http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Functionsar seInt>
<http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Functionsar seFloat>

--
~ Se i miei cattivi pensieri non fossero caricati a salve, ogni giorno
sarebbe una strage.



Reply With Quote
  #4  
Old   
ZER0
 
Posts: n/a

Default Re: Somma di due numeri - 05-07-2008 , 05:02 AM



On Wed, 7 May 2008 11:55:47 +0200, Ugo wrote:

[cut]
Quote:
che non si facciano le opportune conversioni, la più furba ed elegante
dovrebbe essere :
alert(+punto.lat()+0.01);
Hai corretto l'unica cosa che non necessitava correzioni.

--
~ "Solo i morti hanno visto la fine della guerra."
(Platone)



Reply With Quote
  #5  
Old   
sergio59
 
Posts: n/a

Default Re: Somma di due numeri - 05-07-2008 , 05:10 AM



On 7 Mag, 12:01, ZER0 <zer0.sh... (AT) libero (DOT) it> wrote:
Quote:
On Wed, 7 May 2008 02:33:12 -0700 (PDT), sergio59 wrote:
Salve a tutti.
Ho un problema che mi trascino ormai da due giorni.

Potevi chiedere prima. (o cercare negli archivi del NG)

Ho cercato negli archivi e avevo capito che una delle due veniva
trattata come stringa, in effetti, per controllare, avevo anche
inserito queste istruzioni:

if (isNaN(latitude)){
alert("Latitudine non numerica "+latitude);
}
else{
alert("Latitudine numerica "+latitude);
}
if (isNaN(longitude)){
alert("Longitudine non numerica "+longitude);
}
else{
alert("Longitudine numerica "+longitude);
}
if (isNaN(depth)){
alert("Profondità non numerica "+depth);
}
else{
alert("Profondità numerica "+depth);
}

e tutte mi tornavano come fossero numeriche.

Comunque il segno + prima dell'assegnazione, ha risolto l'errore ed
ora funziona.

Grazie

Sergio


Reply With Quote
  #6  
Old   
Ugo
 
Posts: n/a

Default Re: Somma di due numeri - 05-07-2008 , 05:11 AM



Quote:
[cut]
che non si facciano le opportune conversioni, la più furba ed elegante
dovrebbe essere :
alert(+punto.lat()+0.01);

Hai corretto l'unica cosa che non necessitava correzioni.
OPS
:P


Reply With Quote
  #7  
Old   
ZER0
 
Posts: n/a

Default Re: Somma di due numeri - 05-07-2008 , 05:20 AM



On Wed, 7 May 2008 03:10:58 -0700 (PDT), sergio59 wrote:

Quote:
Ho cercato negli archivi e avevo capito che una delle due veniva
trattata come stringa, in effetti, per controllare, avevo anche
inserito queste istruzioni:

if (isNaN(latitude)){
alert("Latitudine non numerica "+latitude);
}
[cut]

Quote:
e tutte mi tornavano come fossero numeriche.
Ma "isNaN" non ti dice se il tipo della variabile è numerico, ti dice
solo se il parametro passato è un numero.

alert(isNaN("12"))
alert(isNaN(12))

Restituiscono entrambi false perché sono entrambi considerati numeri,
ma nel primo caso il valore è di tipo stringa mentre nel secondo è di
tipo numerico. Avresti dovuto usare l'operatore typeof:

alert( typeof "12" );
alert( typeof 12 );

Nel primo caso avresti ottenuto "string", nel secondo "number".

E quindi nel tuo debug:

if ( typeof latitude!="number" ){
alert("Latitudine non numerica "+latitude);
}

Maggiori delucidazioni:

<http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Global_Functions:isN aN>
<http://developer.mozilla.org/en/docs/Core_JavaScript_1.5_Reference:Operators:Special_Op erators:typeof_Operator>

Quote:
Comunque il segno + prima dell'assegnazione, ha risolto l'errore ed
ora funziona.
L'importante è aver capito "il perché" hai risolto in quel modo.

Quote:
Grazie
De nada.

--
~ "Ho sciupato il tempo, e ora il tempo sciupa me."
(W.Shakespeare, "Riccardo II")



Reply With Quote
Reply




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off



Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.