জাভাস্ক্রিপ্ট: বেশ কয়েকটি দশমিক স্থানে গোল, তবে অতিরিক্ত শূন্যগুলি সজ্জিত করুন


85

এখানে দৃশ্যধারণ করা হচ্ছে: .9999999999999999যখন আমার পাওয়া উচিত তখনই পাচ্ছি 1.0
আমি দশমিক দশমিক স্পষ্টতা হারাতে পারি তাই আমি ব্যবহার করছি .toFixed(15), কোন ধরণের কাজ।

বৃত্তাকার কাজ করে তবে সমস্যাটি হ'ল আমাকে দেওয়া 1.000000000000000
বেশ কয়েকটি দশমিক স্থানে ঘুরে দেখার উপায় কি তবে অতিরিক্ত শ্বেতস্থান ছড়িয়ে দেওয়া?

দ্রষ্টব্য: .toPrecisionআমি যা চাই তা নয়; আমি কেবল দশমিক পয়েন্টের পরে কত নম্বর নির্দিষ্ট করতে চাই।
দ্রষ্টব্য 2: আমি কেবলমাত্র ব্যবহার করতে পারি না .toPrecision(1)কারণ দশমিক পয়েন্টের পরে এমন সংখ্যার জন্য উচ্চতর নির্ভুলতা রাখা দরকার যা সত্যিকার অর্থে ডেটা থাকে। আদর্শভাবে, প্রয়োজনীয় হিসাবে ঠিক দশমিক জায়গা (15 পর্যন্ত) থাকবে।


.ToFixed একটি পংক্তিটি একটি স্ট্রিং ফেরত দেয়, সুতরাং এটি কেবল একটি সংখ্যার মাধ্যমে বৃত্তাকারে ট্রিপিং করে এবং তারপরে একটি স্ট্রিংয়ে ফিরে পেছন শূন্যগুলি ছাড়াই এটি পুনরায় রূপান্তরিত করে।
নিল

@ নাথান: কেবল স্পষ্ট করার জন্য। আপনি কি ঠিক ফিক্সড () এর সাথে যে স্ট্রিংটি পেয়েছেন তার পিছনে শূন্যগুলি সরাতে চান ?
জিরি ক্রিজ 5'11

উত্তর:


141
>>> parseFloat(0.9999999.toFixed(4));
1
>>> parseFloat(0.0009999999.toFixed(4));
0.001
>>> parseFloat(0.0000009999999.toFixed(4));
0

4
আপনি নেতিবাচক সংখ্যার সাথে চিকিত্সা করার সময় সেগুলি বন্ধনীতে রাখতে ভুলবেন না: অপারেটর প্রাধান্যের কারণে -2.34.toFixed(1)ফিরে আসে । -2.3
Константин Ван

4
Unary + অপারেটর ব্যবহারটি parseFloatফাংশনের চেয়ে দ্রুত হওয়া উচিত : +number.toFixed(13)এই এক্সপ্রেশনটি 1.000000000000004545 এর মতো জাভাস্ক্রিপ্ট নম্বর অনুলিপিগুলি সরাতেও ব্যবহার করা যেতে পারে।
ygoe

37

হ্যাঁ, একটি উপায় আছে। ব্যবহার parseFloat()

parseFloat((1.005).toFixed(15)) //==> 1.005
parseFloat((1.000000000).toFixed(15)) //==> 1

এখানে একটি সরাসরি উদাহরণ দেখুন: http://jsfiddle.net/nayish/7JBJw/


4
parseFloat("0.0000007")যা দেয় তার জন্য কাজ করে না"7e-7"
ম্যাট হাগিনস

19

যেমনটি আমি বুঝতে পেরেছি, আপনি যে স্ট্রিংয়ের মাধ্যমে পেয়েছেন সেগুলিতে চলমান শূন্যগুলি সরাতে চান toFixed()। এটি খাঁটি স্ট্রিং অপারেশন:

var x = 1.1230000;
var y = x.toFixed(15).replace(/0+$/, "");  // ==> 1.123

6
আপনি একমাত্র সেই ব্যক্তি যিনি সত্যই প্রশ্নের উত্তর দিয়েছেন .. ধন্যবাদ!
মিগেন

4
এটি বৃত্তাকার সংখ্যাগুলিতে বিন্দুটি
ছাড়বে

4
@ প্যাকিল আপনি যদি ডট না চান তবে আপনি এটি নিয়মিত প্রকাশের সাথে প্রতিস্থাপনের জন্য অন্তর্ভুক্ত করতে পারেন ( ...replace(/\.?0+$/, "");)।
জাচ স্নো 21

এটি 0 এবং -0 এ ব্যর্থ হয় কারণ 0খালি স্ট্রিং হয়ে যায় , ""এবং -0হয়ে যায় -, যার কোনটিই প্রত্যাশিত নয় (অনুমানের ভিত্তিতে)। @ জ্যাচ-স্নো আপনার প্রস্তাবিত সমাধান 0 এবং -0 এ ব্যর্থ হয়।
রোবোকট

@ মুগেন, গুসের উত্তর নিয়ে কী সমস্যা ছিল?
ট্রাইসিস

10

Number(n.toFixed(15)) or +(n.toFixed(15)) ট্রেলিং শূন্যগুলি সরিয়ে 15 টি দশমিক স্ট্রিংকে একটি সংখ্যায় রূপান্তর করবে।


4
ভেবেছি আমি এটি উল্লেখ করব, + (n.toFixed (...)) পার্সফ্লোয়েটের চেয়ে অনেক বেশি দক্ষ। কেন তা নিশ্চিত নয়, তবে এটি ক্রোমের সংখ্যার চেয়েও বেশি কার্যকর।
ডোমিনো

8

আপনি যদি কোনও সংখ্যায় ফেরতের মান কাস্ট করেন তবে সেই পিছনের শূন্যগুলি বাদ দেওয়া হবে। এটাও কম বাগাড়ম্বরপূর্ণ চেয়ে parseFloat()নেই।

+(4.55555).toFixed(2);
//-> 4.56

+(4).toFixed(2);
//-> 4

এই ব্যবহার ইউনারী + অপারেটর , আপনি এটি আগে একটি পোতা + + থাকতে হবে তাই যদি একটি স্ট্রিং অপারেশন অংশ হিসাবে এই ব্যবহার করছে: var n=0.9999999999999999; console.log('output ' + +n.toFixed(2));। এফওয়াইআই একটি স্ট্রিংয়ের সামনে একটি অবিচ্ছিন্ন + এটি একটি সংখ্যায় রূপান্তর করে। এমডিএন থেকে: ইউনারি + ক্যান:

পূর্ণসংখ্যা এবং ভাসমানগুলির স্ট্রিং উপস্থাপনাগুলি রূপান্তর করুন, পাশাপাশি অ-স্ট্রিং মানগুলি সত্য, মিথ্যা এবং নাল করে দেয়। দশমিক এবং হেক্সাডেসিমাল ("0x" -প্রিফিক্সড) উভয় বিন্যাসে পূর্ণসংখ্যা সমর্থিত। নেতিবাচক সংখ্যাগুলি সমর্থিত (যদিও হেক্সের জন্য নয়)। যদি এটি কোনও নির্দিষ্ট মানকে বিশ্লেষণ করতে না পারে তবে এটি NaN এ মূল্যায়ন করবে।


@ আরবোক্যাট আমি সবেমাত্র একটি সাধারণ চেক করেছি; +(4.1).toFixed(4)হয় 4.1ক্রোম 60
Константин Ван

আমি পাই না। এই উত্তরটি নিম্নমুখী হওয়ার কারণ কী ছিল?
Константин Ван

@ কে আপনি ঠিক বলেছেন তাই আমি আমার আগের মন্তব্যটি মুছে ফেলেছি এবং উত্তরে যুক্ত করেছি (আমি মনে করি আমি সঠিকভাবে আনরিয়া + ব্যবহার না করে lhs এর স্ট্রিং সহ ইনফিক্স + ব্যবহার
করছিলাম Usually

এই উত্তরটি এখনও এনএএন, ইনফিনিটি, -ইনফিনিটি, 3 ই 30 এবং 0 নিয়ে কাজ করে Some
রোবোক্যাট

(4) .ToFixed (2) -> Chrome এ "4.00" 60.0.3112.113
ড্যানিয়েল কুই

1

এগুলির কিছুই সত্যই আমি শিরোনামের উপর ভিত্তি করে যা খুঁজছিলাম তা পাইনি, উদাহরণস্বরূপ, 5.00 হতে 5 এবং 5.10 হতে 5.1 হবে। আমার সমাধানটি নিম্নরূপ ছিল:

num.toFixed(places).replace(/\.?0+$/, '')

'5.00'.replace(/\.?0+$/, '') // 5
'5.10'.replace(/\.?0+$/, '') // 5.1
'5.0000001'.replace(/\.?0+$/, '') // 5.0000001
'5.0001000'.replace(/\.?0+$/, '') // 5.0001

দ্রষ্টব্য: রেজেক্স কেবলমাত্র যদি কাজ করে places > 0

PS https://developer.mozilla.org/en-US/docs/Web/JavaScript/ উল্লেখ / গ্লোবাল_অবজেক্টস / নাম্বার / টো ফিক্সড


ব্যর্থ হয় 5e30(সংখ্যায় পরিবর্তন হয় 5e3)। কর্নার কেসগুলি ডায়াবোলিকাল!
রোবোক্যাট

0

আরও ভাল পদ্ধতি রয়েছে যা নির্ভুলতা বজায় রাখে এবং শূন্যগুলিও সরিয়ে দেয়। এটি একটি ইনপুট নম্বর নেয় এবং ingালাইয়ের কিছু যাদুতে যে কোনও পিছনের জিরো বন্ধ করে দেবে। আমি 16 পেয়েছি আমার জন্য নির্ভুল সীমা যা আপনি প্লুটোতে কোনও উপগ্রহ স্থাপন না করা উচিত এটি বেশ ভাল।

function convertToFixed(inputnum)
{

      var mynum = inputnum.toPrecision(16);
//If you have a string already ignore this first line and change mynum.toString to the inputnum

      var mynumstr = mynum.toString();
    return parseFloat(mynumstr);
    }
    alert(convertToFixed(6.6/6));

0

toFixed()পদ্ধতি একটি ফরম্যাট numberব্যবহার নির্দিষ্ট বিন্দু স্বরলিপি, এবং একটি ফেরৎ string

এটি অর্ধ-আপ বৃত্তাকার কৌশল প্রয়োগ করে ।

(0.124).toFixed(2); // returns 0.12
(0.125).toFixed(2); // returns 0.13

যেমনটি আপনি বর্ণনা করেছেন, এর ফলস্বরূপ (কখনও কখনও সম্ভাব্য অপ্রয়োজনীয়) জিরোদের পিছনে ফেলে দেওয়া হবে।

(0.001).toFixed(2); // returns 0.00

আপনি এই পেছনের শূন্যগুলি থেকে মুক্তি পেতে না চাইতে পারেন, মূলত আপনি কেবল এটিকে রূপান্তর করতে পারেন number। এটি করার অনেকগুলি উপায় রয়েছে।

+(0.001).toFixed(2); // the shortest

স্ট্রিংগুলিকে সংখ্যায় রূপান্তর করার বিভিন্ন পদ্ধতির একটি ওভারভিউয়ের জন্য, দয়া করে এই প্রশ্নটি দেখুন, যার কয়েকটি দুর্দান্ত উত্তর রয়েছে।

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