İki dizeyi bir araya getirmek yerine JS'yi matematik yapmaya zorlama


102

Bir tamsayı değişkenine 5 eklemek için javascript'e ihtiyacım var, ancak bunun yerine değişkeni bir dize olarak ele alıyor, böylece değişkeni yazıyor ve ardından "dizenin" sonuna 5 ekliyor. Onun yerine matematik yapmaya nasıl zorlayabilirim?

var dots = document.getElementById("txt").value; // 5
function increase(){
    dots = dots + 5;
}

Çıktı: 55

Nasıl çıktı almaya zorlayabilirim 10?


3
Bu belirli örnek 10 çıktı verir.
deceze


10
Size yardım etmek isteyenler için herhangi bir girişimde bulunmadan tüm kodunuzu çöpe atarak aşırı bir yük bindiniz. Kendiniz test edin ... #controlSorununuzda herhangi bir fark yaratmak için CSS özellikleri yapıyor musunuz? Değilse, silin ve bize göstermeyin. Sorununuzu yeniden oluşturmak için gereken mutlak minimum test senaryosuna sahip olana kadar kodunuzu azaltmaya devam edin. Bunu yaparken Çoğu zaman neden olacaktır Eğer sorunu bulmaya ve süreç içinde öğrenirler. Kendiniz çözmezseniz, basit örneğinizle hızlı bir şekilde yardım alma olasılığınız çok yüksektir.
Phrogz

Yanıtlar:


108

Çizgiye sahipsin

dots = document.getElementById("txt").value;

dosyanızda, bu, noktaları bir dizge olarak ayarlayacaktır, çünkü txt içeriği bir sayı ile sınırlı değildir.

int'e dönüştürmek için satırı şu şekilde değiştirin:

dots = parseInt(document.getElementById("txt").value, 10);

Not: 10Burada, ondalık (taban-10) belirtir. Bu olmadan bazı tarayıcılar dizeyi doğru şekilde yorumlayamayabilir. MDN bakınız: parseInt.


3
kısayol ... noktalar = + document.getElementById ("txt"). değer
Tracker1

5
parseInt (..., 10) ayrıca, her zaman bir taban kullanın ... bir akıl sağlığı kontrolü ... eğer (! noktalar || noktalar <1) da sıralı olabilir ...
Tracker1

1
Toplama için artırma operatörünü daha iyi kullanın. VAR = VAR + 1 yerine VARIABLE ++ gibi;
gnganapath

54

en basit:

dots = dots*1+5;

noktalar sayıya dönüştürülecektir.


34
Bundan daha basit dots = +dots+5.
Andy E


9

Bu yanıtı ekliyorum çünkü burada göremiyorum.

Bunun bir yolu, değerin önüne "+" karakteri koymaktır

misal:

var x = +'11.5' + +'3.5'

x === 15

Bunu en basit yol olarak buldum

Bu durumda satır:

dots = document.getElementById("txt").value;

olarak değiştirilebilir

dots = +(document.getElementById("txt").value);

onu bir sayıya zorlamak

NOT:

+'' === 0
+[] === 0
+[5] === 5
+['5'] === 5

8

parseInt() hile yapmalı

var number = "25";
var sum = parseInt(number, 10) + 10;
var pin = number + 10;

Sana verir

sum == 35
pin == "2510"

http://www.w3schools.com/jsref/jsref_parseint.asp

Not: in 10, parseInt(number, 10)ondalık sayıları belirtir (taban 10). Bu olmadan bazı tarayıcılar dizeyi doğru şekilde yorumlayamayabilir. MDN bakınız: parseInt.



1

gerçekten çok basit

var total = (1 * yourFirstVariablehere) + (1 * yourSecondVariablehere)

javascript'te * oturum açma karmaşası olmadığından bu, javascript'i çarpmaya zorlar.


1

Değişkenin arkasına + ekleyebilirsin ve bu onu bir tam sayı olmaya zorlar

var dots = 5
    function increase(){
        dots = +dots + 5;
    }

1

Benim özel durumum için cevapların çoğunu burada denedikten sonra, şunu buldum:

dots = -(-dots - 5);

+ İşaretleri js'nin kafasını karıştıran şeydir ve bu onları tamamen ortadan kaldırır. Anlaşılması kafa karıştırıcıysa, uygulaması basittir.


-3

Bunun en son olumsuz oylanmasından bu yana GÜNCELLENDİ ...

Sadece kısmını gördüm

var dots = 5
function increase(){
    dots = dots+5;
}

daha önce, ancak daha sonra txtkutunun değişkeni beslediği bana gösterildi dots. Bu nedenle, yalnızca tam sayılar içerdiğinden ve kötü amaçlı kod içermediğinden emin olmak için girişi "temizlediğinizden" emin olmanız gerekir.

Bunu yapmanın kolay bir yolu, metin kutusunu onkeyup()sayısal karakterler içerdiğinden emin olmak için bir olayla ayrıştırmaktır :

<input size="40" id="txt" value="Write a character here!" onkeyup="GetChar (event);"/>

Olay bir hata verir ve değer bir sayı değilse son karakteri temizler:

<script type="text/javascript">
    function GetChar (event){
        var keyCode = ('which' in event) ? event.which : event.keyCode;
        var yourChar = String.fromCharCode();
        if (yourChar != "0" &&
            yourChar != "1" &&
            yourChar != "2" &&
            yourChar != "3" && 
            yourChar != "4" &&
            yourChar != "5" &&
            yourChar != "6" && 
            yourChar != "7" &&
            yourChar != "8" && 
            yourChar != "9")
        {
            alert ('The character was not a number');
            var source = event.target || event.srcElement;
            source.value = source.value.substring(0,source.value-2);
        }
    }
</script>

Açıkçası bunu regex ile de yapabilirsiniz, ama ben tembel çıkış yolunu seçtim.

O zamandan beri, kutuda yalnızca sayıların olabileceğini bilecektiniz, yalnızca şunları kullanabilmelisiniz eval():

dots = eval(dots) + 5;

2
eval()dotskullanıcı girdisinden geliyorsa, özellikle de saklanan girdiden geliyorsa tehlikelidir . Daha fazla bilgi
Chad Levy

@ChadLevy Bağlantı için teşekkürler - iyi bir okuma - ve bunu gündeme getirdi, ancak bu durumda kullanıcı girdisinden kaynaklanmadığı için endişe haksızdı. dotsartırılan ve sadece bir dizeyle karıştırılan tanımlanmış bir değişkendi. Bu yüzden, söylediğiniz gibi, kötü komut dosyası enjeksiyonu potansiyeline sahip olabilecek kullanıcı / depolanan girdilerden hafifçe kullanılmaması gerektiği cevabımı nitelendireceğim. Ama aynı zamanda bu durumda, böyle bir enjeksiyon matematiksel bir hataya / istisnaya neden olur, bu yüzden her halükarda gerçekten hiçbir şey yapmaz.
vapcguy

eval()Çok tehlikeli olduğunu düşündüğünüz için olumsuz oy kullananlar için, koda OP'nin kullandığı bağlamda bakmanız gerekir. Bu durumda değildir, çünkü bir metin kutusundan veya sayısal olmayan bir değerin herhangi bir şekilde enjeksiyonunun olabileceği başka herhangi bir kullanıcı girdisinden gelmeyen girdiyi kullanıyor! Keşke sizden olumsuz oy alabilseydim!
vapcguy

Başka bir olumsuz oy veren. Sadece koyun olmak yerine kendinizi açıklamak ister misiniz? İyi olduğu zamanlar vardır eval()ve gerçekten anlamadan okuduğunuz her şeye körü körüne inanmak yerine, kullanıldığı bağlama bakmanız gerekir!
vapcguy

1
@ChadLevy Tamam, bu açıdan haklısın. O bölüme bakmadım - sayfanın üst kısmına ne koyduğuna odaklandım: kod var dots = 5 function increase(){ dots = dots+5; }bir metin alanı kullanmıyor ve kullanıcı girdisinden değil, doğrudan değişkenler kullanarak atıyor. Ben de bundan çıktım. Ama o metin alanını atadığına doğru şeyiz gördü txtetmek dotsve dotsglobal bir değişkendir ve böylece girdi tarafından güncellenir. Haklısın. Teşekkürler.
vapcguy
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.