কেন 0.-5 মূল্যায়ন করে -5?


85

ধরুন আমি লিখি 0.5যেমন 0.-5অপ্রত্যাশিত ভাবে, কিন্তু এটি এখনও রান করতে পারেন। কী 0.মধ্যে 0.-5যাতে এটি এখনও চালাতে এবং মূল্যায়ন করতে -5 না?

আমি alert(0.-5+1)কোন প্রিন্ট -4 চেষ্টা করেছিলাম , জাভাস্ক্রিপ্ট উপেক্ষা 0.করে 0.-5?


55
0.ভালো হয় 0.0। বা ঠিক 0
রাই-

61
কী আপনার মনে করে যে 0.-5এটি একটি "অপ্রত্যাশিত উপায়"?
নিকো হাজে

15
@ নিকোহেস: আমি নিশ্চিত যে ওপি "অপ্রত্যাশিতভাবে" এর অর্থ ব্যবহার করেছিল "এটি লেখার আমার ইচ্ছা / প্রত্যাশা ছিল না, তবে কোনওভাবেই করেছি"।
ফিলিপ মিলোভানোভিć

15
এটি অন্যান্য অনেক ভাষায়ও কাজ করে (যেমন পাইথন)। আমি ব্যক্তিগতভাবে এটি মোটেও পছন্দ করি না। আমি বরং 0.-5সিনট্যাক্স ত্রুটি হতাম এবং একটি পিছনের সময় সহ ভাসমান আক্ষরিককে অনুমতি না .0দিয়ে শেষ পর্যন্ত লোকদের লিখতে বাধ্য করি ।
গিয়াকোমো আলজেটা

9
এটি বিশেষত খারাপ কারণ সংখ্যাগুলি শেষ হতে .দেয় এমন কিছু লিখতে আপনাকে বাধা দেয় 123.toString(16)(একটি সাধারণ কৌশল ব্যবহার করা 123..toString(16)যা সত্যই (123.).toString(16))
12

উত্তর:


191

এর পরে ট্রিলিং ডিজিটগুলি alচ্ছিক .:

console.log(0. === 0); // true

তাই

0.-5

যাও evalutes

0 - 5

যা ঠিক -5। একইভাবে,

0.-5+1

হয়

0 - 5 + 1

যা হলো

-5 + 1

বা -4


17
শীর্ষস্থানীয় সংখ্যাগুলিও areচ্ছিক, তাই .0-5 এছাড়াও বৈধ
আইসেইনাক

48

0.-5সফলভাবে যেমন বিশ্লেষণ হতে পারে 0.[1] , -এবং 5। নীচে এএসটি এক্সপ্লোরার দ্বারা উত্পাদিত এক্সপ্রেশনটির জন্য বিমূর্ত সিনট্যাক্স ট্রিটি রয়েছে:

এএসটি এক্সপ্লোরার দ্বারা তৈরি হওয়া পার্স ট্রি

এটি (অপ্রত্যাশিত উপায়ে) বৈধ জাভাস্ক্রিপ্ট এবং এতে মূল্যায়ন করে -5


[1] সংখ্যাসূচক আক্ষরিক ব্যাকরণ অনুসারে দশমিক সংখ্যা এবং সূচক অংশগুলি alচ্ছিক :

সংখ্যাসূচক:
  দশমিক লিটারাল
  [...]

ডেসিমাল লাইটারাল ::
  ডেসিমালইন্টার লাইটারাল। DecimalDigits অপ্ট ExponentPart অপ্ট


আপনি কীভাবে এএসটি উত্তোলন করলেন?
Κωλζαρ

8
Astexplorer.net এ যান , একটি ভাষা এবং একটি পার্সার চয়ন করুন, কোডটি আটকান, JSON আউটপুট চয়ন করুন (বা কেবল একটি স্ক্রিনশট নিন)।
সালমান এ

39

জেএসে আপনি numberচ্ছিক দশমিক পয়েন্ট সহ একটি সংখ্যা প্রকাশ করতে পারেন।

x = 5.;    //5
x = 5. + 6.   //11

এবং টিভিডি 1 এর মন্তব্য হিসাবে, কোনও নম্বর পদ্ধতিও প্রয়োগ করা যেতে পারে।

5..toString()

এই সিনট্যাক্সটি আমাদের প্রথম বন্ধনী ছাড়াই সংখ্যা ফাংশনগুলি চালায়।

5.toString() //error
(5).toString() //good
5..toString() //good
5 .toString() // awesome

কেন তা জানতে এই প্রশ্নটি দেখুন ।


4
আপনি এমনকি করতে পারেন 5..toString()
Tvde1

4
যদি সত্য হয়, আপনাকে পদ্ধতিটি কল করতে 5 to টু স্ট্রিং () করতে হবে, অন্যথায়, আপনাকে প্রথম বন্ধনী ব্যবহার করতে হবে: (5) .toString ()
jo_va

4
একজনের জন্য পিটারমোরটেনসেন রুবি। এছাড়াও ALGOL 68. প্রচলিত লিপ্পে, অদ্ভুতভাবে যথেষ্ট, 1.0ভাসমান পয়েন্ট তবে 1.এটি একটি পূর্ণসংখ্যা।
স্নেফটেল

4
@ ফ্লোরিয়ানএফ আপনি করবেন না, তবে এর অর্থ এই নয় যে পার্সারটিকে এটি প্রত্যাখ্যান করার জন্য বিশেষ-বিশেষ হওয়া উচিত। floats এর পদ্ধতি রয়েছে এবং 5.এটি a float
চ্যানার

4
@ ম্যাসনহিলার অবশ্যই এটি এমনটি নয় যে অন্য যে কোনও ভাষা যেখানে (1).toMethod()আইনী সেখানে (1.)সঠিকভাবে পার্স করা নিষিদ্ধ করেছে । পার্সিংয়ের সর্বাধিক traditionalতিহ্যবাহী পদ্ধতির (টোকেনের লোভী লেক্সিং, আক্ষরিক সহ, তারপর বিশ্লেষণ) জাভাস্ক্রিপ্ট আচরণ তৈরি করে।
স্নেফটেল

7

আমি ভাবব যে আসল উত্তর দশমিক বিন্দু সম্পর্কে নয়, তবে বিয়োগ চিহ্ন সম্পর্কে: এটি যদি কোনও সংখ্যার মতো দেখতে কিছু থাকে তার আগে যদি অপারেটর হিসাবে ব্যাখ্যা করা যায় না?


4
তারপর, দেখুন কিছু পয়েন্ট অন্তত, এটা এখনও হয় দশমিক বিন্দু একটি সংখ্যা আক্ষরিক অংশ হিসেবে ব্যাখ্যা করা হচ্ছে সম্পর্কে, অন্যথায় কি বিয়োগ চিহ্ন would নয় "একটি সংখ্যা মত দেখাচ্ছে" পূর্বে।
প্যাক 0

5

console.log(0. - 5)      // -5
console.log(0 - 5)       // -5
console.log('0.' - 5)    // -5
console.log('0' - 5)     // -5
console.log(0.-5 === -5) // true

'০' বা '0' জাভাস্ক্রিপ্টে একই কারণ সংখ্যার জন্য টাইপটি অনন্য, নাম্বার বলে। বিয়োগকারী অপারেটর নম্বরের মধ্যে রয়েছে, আপনি যা পাস করেন তা সংখ্যায় রূপান্তর করার জন্য সর্বদা চেষ্টা করুন। পাইথনে পৃথক পৃথক পৃথক এবং দ্বিতীয়টি পূর্ণসংখ্যার কারণ এটির বিভিন্ন প্রকার রয়েছে।


এই সমস্যাটি প্রকারের সাথে সম্পর্কিত নয়; এটি কেবল সিনট্যাক্সের সাথে সম্পর্কিত।
সেবাস্তিয়ান সাইমন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.