Javascript addition med negativt tal

Permalänk
Medlem

Javascript addition med negativt tal

Hej,
Har förhoppningsvis ett enkelt problem, håller på med ett javascript där jag ska ändra en css egenskap.
Scriptet ser ut som följer:

var value = $(colors).css("top").replace(/[^-\d\.]/g, ''); value = 21 + (value); $(colors).css("top", value);

Variabeln Value har i detta fallet värdet -21. Men när jag 21 + -21 så får jag värdet 21-21, men jag vill att värdet ska bli 0.
Hur ska jag göra för att värdet ska bli 0 i detta fallet?

Tack på förhand för svar!

Permalänk

21-21 är väl noll? För om value ska få värdet av 21 minus 21 så får det med all logik värdet noll.

Visa signatur

Insert funny joke here

Permalänk
Medlem

Prova:

value = value + parseInt(value) istället, använd parseFloat om du behöver decimaler. Jag misstänker att den tar value för en sträng och inte ett nummer.

Skickades från m.sweclockers.com

Permalänk
Medlem

Ja fast javascriptet ger värdet 21-21, alltå bara lägger samman 21 och -21. Alltså javascriptet utför inte matten, så jag undrar hur jag ska göra för att javascriptet ska utföra matten. Det är som att javascriptet inte uppfattar att det är tal utan ser value och 21 som en sträng.

Permalänk
Medlem
Skrivet av Nallepigan:

Prova:

value = value + parseInt(value) istället, använd parseFloat om du behöver decimaler. Jag misstänker att den tar value för en sträng och inte ett nummer.

Skickades från m.sweclockers.com

Det fungerade! Tack!

Permalänk
Entusiast

Tror det kan bero på den första raden i ditt exempel, som skapar en sträng, tack vare "replace".
Efter att du utfört replace-funktionen, bör du konvertera strängen till ett numeriskt värde. Först då utförs beräkningen.

Precis som föregående talare skriver, kan du nyttja parseInt och parseFloat till detta.

Exempel:

var value = parseInt( $(colors).css("top").replace(/[^-\d\.]/g, '') );

Visa signatur

Bästa programmen till Linux - v2.0
Linux-guide: Val av grafisk miljö. (Att välja distribution).
-
Everyone should have a SGoC in their systems (SGoC: SysGhost on a Chip)

Permalänk
Medlem
Skrivet av SysGhost:

Tror det kan bero på den första raden i ditt exempel, som skapar en sträng, tack vare "replace".
Efter att du utfört replace-funktionen, bör du konvertera strängen till ett numeriskt värde. Först då utförs beräkningen.

Precis som föregående talare skriver, kan du nyttja parseInt och parseFloat till detta.

Exempel:

var value = parseInt( $(colors).css("top").replace(/[^-\d\.]/g, '') );

Mycket bra feedback, det är så klart bättre att ha rätt datatyp från början om du någon gång behöver använda samma värde flera gånger (besparar några onödiga "type casts")

Skickades från m.sweclockers.com

Permalänk
Hedersmedlem
Skrivet av ande85:

var value = $(colors).css("top").replace(/[^-\d\.]/g, '');

Hur ser strängen `$(colors).css("top")` ut? Den där `replace()`-funktionen ser bökig ut; borde gå att göra på ett tydligare (och mer felsäkert) sätt.

EDIT: Det var tänkt som en ledande fråga, men jag kan utveckla i stället: just nu tar du och strippar allt som inte är minustecken, siffror eller punkter (varför punkter? (återigen en ledande fråga )). Om `top` har standardvärdet `auto` så kommer du få en tom sträng (hur hanteras det av `parseInt()`?). Notera att om egenskapen är angiven i pt/em/% så returneras det framräknade px-värdet likväl.

Vilka är de möjliga returvärdena från `css()`? Istf `replace()` skulle du kanske kunna använda ett specifikt test för värdet `'auto'` och annars använda `.slice()` för att strippa `px` från strängen.

Och som nämnts innan, om än kort: om du alltid vill sätta egenskapen till `0`, så bara sätt den till `0`.

Visa signatur

Nu med kortare användarnamn, men fortfarande bedövande långa inlägg.

Permalänk
Avstängd

Jag hoppas inte det är så att du använder style attributet som data container utan att det är så att du parsar statisk html från en webbserver? Om så inte är fallet är det såklart mycket bättre att behålla det faktiska värdet och använda detta istället för att parsa.

Visa signatur