কীভাবে জেএসকে দুটি স্ট্রিং একসাথে না রেখে গণিত করতে বাধ্য করবেন force


102

একটি পূর্ণসংখ্যের ভেরিয়েবলে 5 যোগ করার জন্য আমার জাভাস্ক্রিপ্টের প্রয়োজন, তবে পরিবর্তে এটি ভেরিয়েবলটিকে স্ট্রিং হিসাবে বিবেচনা করে, সুতরাং এটি ভেরিয়েবলটি লিখবে, তারপরে "স্ট্রিং" এর শেষে 5 যুক্ত করুন। পরিবর্তে আমি কীভাবে এটি গণিত করতে বাধ্য করতে পারি?

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

আউটপুট: 55

আমি কীভাবে এটিকে আউটপুট করতে বাধ্য করতে পারি 10?


3
এই বিশেষ উদাহরণ আউটপুট 10.
deceze


10
আপনার সমস্ত কোড নষ্ট করার চেষ্টা না করে আপনি যাঁরা আপনাকে সহায়তা করতে চান তাদের উপর আপনি অযৌক্তিক বোঝা চাপিয়ে দিয়েছেন। এটি নিজেই পরীক্ষা করুন ... সিএসএস অ্যাট্রিবিউটগুলি #controlকী আপনার সমস্যার কোনও পার্থক্য আনবে? যদি তা না হয় তবে সেগুলি মুছুন এবং সেগুলি আমাদের দেখান না। আপনার সমস্যার পুনরুত্পাদন করার জন্য আপনার সর্বনিম্ন সর্বনিম্ন পরীক্ষার কেস না হওয়া পর্যন্ত আপনার কোড হ্রাস করতে থাকুন। সময় এমনটি অধিকাংশই কারণ হবে আপনি সমস্যা খুঁজে পেতে এবং প্রক্রিয়ায় শিখতে। যদি আপনি নিজেই এটি সমাধান না করেন তবে আপনার সাধারণ উদাহরণ দিয়ে দ্রুত সহায়তা পাওয়ার খুব সম্ভব।
ফোগজ

উত্তর:


108

আপনার লাইন আছে

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

আপনার ফাইলে, এটি বিন্দুগুলিকে স্ট্রিং হিসাবে সেট করবে কারণ txt এর বিষয়বস্তু একটি সংখ্যার মধ্যে সীমাবদ্ধ নয়।

এটিকে রূপান্তর করতে একটি লাইনটি এতে পরিবর্তন করুন:

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

দ্রষ্টব্য: 10এখানে দশমিক (বেস -10) নির্দিষ্ট করে। এটি ছাড়া কিছু ব্রাউজার স্ট্রিংটির সঠিক ব্যাখ্যা করতে পারে না। MDN দেখুন: parseInt


3
শর্টকাট ... ডটস + + ডকুমেন্ট.সেটমেন্টবিওয়াইআইডি ("txt")। মান
ট্র্যাকার 1

5
parseInt (..., 10), সর্বদা একটি রেডিক্স ব্যবহার করুন ... একটি বিড়াল চেক ... যদি (! বিন্দু || ডটস <1) খুব
ক্রমযুক্তও

1
সংযোজনের জন্য আরও ভাল ব্যবহার বর্ধিত অপারেটর। VARIABLE ++ এর পরিবর্তে VAR = VAR + 1 এর মতো;
gnganpath



9

আমি এই উত্তরটি যুক্ত করছি কারণ আমি এখানে এটি দেখতে পাচ্ছি না।

একটি উপায় হ'ল মানের সামনে একটি '+' অক্ষর রাখা

উদাহরণ:

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

x === 15

আমি এটি সবচেয়ে সহজ উপায় হিসাবে খুঁজে পেয়েছি

এই ক্ষেত্রে, লাইন:

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

পরিবর্তিত হতে পারে

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

এটি একটি সংখ্যা জোর করা

বিঃদ্রঃ:

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

8

parseInt() কৌতুক করা উচিত

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

আপনি দেয়

sum == 35
pin == "2510"

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

দ্রষ্টব্য: 10ইন parseInt(number, 10)সুনির্দিষ্ট দশমিক (বেস -10)। এটি ছাড়া কিছু ব্রাউজার স্ট্রিংটির সঠিক ব্যাখ্যা করতে পারে না। MDN দেখুন: parseInt




1

আপনি চলকটির পিছনে + যুক্ত করতে পারেন এবং এটি এটি পূর্ণসংখ্যা হতে বাধ্য করবে

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

1

আমার বিশেষ মামলার সাফল্য ছাড়াই এখানে বেশিরভাগ উত্তর চেষ্টা করার পরে, আমি এটি নিয়ে এসেছি:

dots = -(-dots - 5);

+ লক্ষণগুলি হ'ল জেএসকে বিভ্রান্ত করে এবং এটি তাদের পুরোপুরি দূর করে। বাস্তবায়িত করা সহজ, যদি বোঝার জন্য সম্ভাব্য বিভ্রান্ত হয়।


-3

এটি সর্বশেষে নিম্নচোটিত হওয়ার পরে আপডেট হয়েছে ....

আমি কেবল অংশটি দেখেছি

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

আগে, তবে এটি পরে আমাকে দেখানো হয়েছিল যে txtবাক্সটি ভেরিয়েবলকে খাওয়ায়dots । এ কারণে, আপনাকে ইনপুটটি "পরিষ্কার" করতে নিশ্চিত হতে হবে, এটি নিশ্চিত করতে হবে যে এটিতে কেবল পূর্ণসংখ্যা রয়েছে, এবং দূষিত কোড নয়।

এটি করার একটি সহজ উপায় হ'ল পাঠ্যবক্সটি onkeyup()সংখ্যাসূচক অক্ষর রয়েছে তা নিশ্চিত করার জন্য একটি ইভেন্টের সাথে পার্স করা :

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

যেখানে ইভেন্টটি একটি ত্রুটি দেয় এবং শেষের অক্ষরটি সাফ করে যদি মানটি একটি নম্বর না হয়:

<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>

স্পষ্টতই আপনি রেজেক্সের সাহায্যে এটিও করতে পারেন, তবে আমি অলস উপায়টি বের করেছিলাম।

সেই থেকে আপনি জানতে পারবেন যে বাক্সে কেবলমাত্র সংখ্যা থাকতে পারে, আপনার কেবলমাত্র ব্যবহার করতে সক্ষম হবেন eval():

dots = eval(dots) + 5;

2
eval()dotsব্যবহারকারীর ইনপুট থেকে থাকলে তা বিপজ্জনক , বিশেষত যদি এটি সঞ্চিত ইনপুট থেকে থাকে। আরও তথ্য
চাদ লেভি

@ চ্যাডল্যাভি এই লিঙ্কটির জন্য ধন্যবাদ - একটি ভাল পড়া - এবং এটিকে সামনে আনার জন্য, তবে এই ক্ষেত্রে উদ্বেগটি অনাকাঙ্খিত ছিল, কারণ এটি ব্যবহারকারী ইনপুট থেকে ছিল না। dotsএটি একটি সংজ্ঞায়িত ভেরিয়েবল ছিল যা বাড়ানো হচ্ছে এবং একটি স্ট্রিংয়ের জন্য কেবল ভুল হয়েছে। সুতরাং আমি আমার উত্তরটির যোগ্যতা অর্জন করব যে এটি হালকাভাবে ব্যবহার করা উচিত নয়, যেমনটি আপনি বলেছেন, ব্যবহারকারী / সঞ্চিত ইনপুট থেকে যা মন্দ স্ক্রিপ্টিং ইঞ্জেকশনের সম্ভাবনা থাকতে পারে। তবে এই ক্ষেত্রেও, এই জাতীয় ইনজেকশনটি কোনওভাবেই গণিতের ত্রুটি / ব্যতিক্রম ঘটায়, তাই এটি সত্যিই কোনও উপায়েই করবে না।
vapcguy

এই ডাউনভোটিংয়ের জন্য যেহেতু আপনি মনে করেন যে eval()এটি অত্যন্ত বিপজ্জনক, আপনার কোডটি ওপিটি যে প্রসঙ্গে ব্যবহার করছিল সেদিকে নজর দেওয়া উচিত। এটি এই ক্ষেত্রে নয়, কারণ তিনি এমন ইনপুট ব্যবহার করছেন যা কোনও পাঠ্যবক্স বা ব্যবহারকারী ইনপুট থেকে অন্য কোনও ফর্ম আসে না যেখানে কোনও অ-সংখ্যাসূচক মানের ইনজেকশনের কোনও ফর্ম থাকতে পারে! আমি আশা করি আমি তোমার উঁচু স্থানকে কমিয়ে দিতে পারতাম!
vapcguy

আরেকজন ডাউনভোটার। নিজেকে বোঝানোর জন্য যত্ন নেওয়া, কেবল ভেড়া হওয়ার পরিবর্তে? এমন সময় আছে যখন eval()ঠিক আছে, এবং আপনাকে যে প্রসঙ্গে এটি ব্যবহার করা হচ্ছে সেদিকে নজর দেওয়া দরকার, আপনি যা পড়েন তা অন্ধভাবে বিশ্বাস না করে আপনি যা কিছু পড়েন তা আসলে না বুঝে!
vapcguy

1
@ চ্যাডলিভি ঠিক আছে, এই গণনা অনুযায়ী, আপনি ঠিক বলেছেন। আমি সেই বিভাগটির দিকে নজর দিইনি - পৃষ্ঠার শীর্ষে তিনি কী রেখেছিলেন তার প্রতি আমি দৃষ্টি নিবদ্ধ রেখেছিলাম: কোড var dots = 5 function increase(){ dots = dots+5; }কোনও পাঠ্য ক্ষেত্র ব্যবহার করে না এবং ব্যবহারকারীর ইনপুট থেকে নয়, সরাসরি ভেরিয়েবল ব্যবহার করে বরাদ্দ দেয়। সুতরাং যে আমি কি বন্ধ ছিল। কিন্তু আমি দেখেছি তুমি ঠিক সে টেক্সট ক্ষেত্রের বরাদ্দ txtকরতে dots, এবং dotsএকটি বিশ্বব্যাপী পরিবর্তনশীল, এবং তাই যে ইনপুট দ্বারা আপডেট পায়। তুমি ঠিক বলছো. ধন্যবাদ।
vapcguy
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.