আমি জাভাস্ক্রিপ্টে একটি ফ্লোটকে একটি পুরো সংখ্যায় রূপান্তর করতে চাই। প্রকৃতপক্ষে, আমি কীভাবে স্ট্যান্ডার্ড রূপান্তরগুলির দুটি করতে হবে তা জানতে চাই: ছাঁটাই করে এবং গোল করে। এবং দক্ষতার সাথে স্ট্রিংতে রূপান্তর করে পার্সিংয়ের মাধ্যমে নয়।
আমি জাভাস্ক্রিপ্টে একটি ফ্লোটকে একটি পুরো সংখ্যায় রূপান্তর করতে চাই। প্রকৃতপক্ষে, আমি কীভাবে স্ট্যান্ডার্ড রূপান্তরগুলির দুটি করতে হবে তা জানতে চাই: ছাঁটাই করে এবং গোল করে। এবং দক্ষতার সাথে স্ট্রিংতে রূপান্তর করে পার্সিংয়ের মাধ্যমে নয়।
উত্তর:
var intvalue = Math.floor( floatvalue );
var intvalue = Math.ceil( floatvalue );
var intvalue = Math.round( floatvalue );
// `Math.trunc` was added in ECMAScript 6
var intvalue = Math.trunc( floatvalue );
// value=x // x=5 5<x<5.5 5.5<=x<6
Math.floor(value) // 5 5 5
Math.ceil(value) // 5 6 6
Math.round(value) // 5 5 6
Math.trunc(value) // 5 5 5
parseInt(value) // 5 5 5
~~value // 5 5 5
value | 0 // 5 5 5
value >> 0 // 5 5 5
value >>> 0 // 5 5 5
value - value % 1 // 5 5 5
নেতিবাচক
// value=x // x=-5 -5>x>=-5.5 -5.5>x>-6
Math.floor(value) // -5 -6 -6
Math.ceil(value) // -5 -5 -5
Math.round(value) // -5 -5 -6
Math.trunc(value) // -5 -5 -5
parseInt(value) // -5 -5 -5
value | 0 // -5 -5 -5
~~value // -5 -5 -5
value >> 0 // -5 -5 -5
value >>> 0 // 4294967291 4294967291 4294967291
value - value % 1 // -5 -5 -5
ধনাত্মক - আরও বড় সংখ্যা
// x = Number.MAX_SAFE_INTEGER/10 // =900719925474099.1
// value=x x=900719925474099 x=900719925474099.4 x=900719925474099.5
Math.floor(value) // 900719925474099 900719925474099 900719925474099
Math.ceil(value) // 900719925474099 900719925474100 900719925474100
Math.round(value) // 900719925474099 900719925474099 900719925474100
Math.trunc(value) // 900719925474099 900719925474099 900719925474099
parseInt(value) // 900719925474099 900719925474099 900719925474099
value | 0 // 858993459 858993459 858993459
~~value // 858993459 858993459 858993459
value >> 0 // 858993459 858993459 858993459
value >>> 0 // 858993459 858993459 858993459
value - value % 1 // 900719925474099 900719925474099 900719925474099
নেতিবাচক - বড় সংখ্যা
// x = Number.MAX_SAFE_INTEGER/10 * -1 // -900719925474099.1
// value = x // x=-900719925474099 x=-900719925474099.5 x=-900719925474099.6
Math.floor(value) // -900719925474099 -900719925474100 -900719925474100
Math.ceil(value) // -900719925474099 -900719925474099 -900719925474099
Math.round(value) // -900719925474099 -900719925474099 -900719925474100
Math.trunc(value) // -900719925474099 -900719925474099 -900719925474099
parseInt(value) // -900719925474099 -900719925474099 -900719925474099
value | 0 // -858993459 -858993459 -858993459
~~value // -858993459 -858993459 -858993459
value >> 0 // -858993459 -858993459 -858993459
value >>> 0 // 3435973837 3435973837 3435973837
value - value % 1 // -900719925474099 -900719925474099 -900719925474099
var intValue = ~~floatValue;
। স্বরলিপি আপনার কাণ্ডকীর্তি জন্য অস্পষ্ট খুব হয়, তাহলে শুধু একটি ফাংশনে গোপন: function toInt(value) { return ~~value; }
। (যদি আপনি এটির যত্ন নেন তবে এটি স্ট্রিংকে পূর্ণসংখ্যায় রূপান্তরিত করে))
Math.trunc(val);
মন্তব্য করুন কারণ এটি গৃহীত উত্তর
2.3 - 2.3 % 1
একটি বিটওয়াস বা অপারেটরটি ভাসমান পয়েন্টের পরিসংখ্যানগুলি কাটাতে ব্যবহার করা যেতে পারে এবং এটি ইতিবাচক পাশাপাশি নেতিবাচক ক্ষেত্রেও কাজ করে:
function float2int (value) {
return value | 0;
}
ফলাফল
float2int(3.1) == 3
float2int(-3.1) == -3
float2int(3.9) == 3
float2int(-3.9) == -3
আমি একটি জেএসপিআইপি পরীক্ষা তৈরি করেছি যা পারফরম্যান্সের সাথে তুলনা করে:
Math.floor(val)
val | 0
, bitwise ও~~val
, bitwise নটparseInt(val)
এটি কেবল ধনাত্মক সংখ্যার সাথে কাজ করে। এই ক্ষেত্রে আপনি বিটওয়াইজ অপারেশন পাশাপাশি Math.floor
ফাংশন ব্যবহার করা নিরাপদ ।
তবে যদি আপনার কোডটি ইতিবাচক পাশাপাশি নেতিবাচক সাথে কাজ করার প্রয়োজন হয় তবে একটি বিটওয়াইজ অপারেশনটি সবচেয়ে দ্রুত (বা পছন্দসইটি হচ্ছে)।এই অন্যান্য জেএসপিফার পরীক্ষাটি একই সাথে তুলনা করেছে যেখানে এটি খুব সুস্পষ্ট যে অতিরিক্ত সাইন চেকের কারণে ম্যাথ এখন চারটির মধ্যে সবচেয়ে ধীর ।
মন্তব্যে যেমন বলা হয়েছে, বিটডব্লিউএসই অপারেটররা স্বাক্ষরিত 32 বিট পূর্ণসংখ্যার উপর কাজ করে, তাই বিপুল সংখ্যক রূপান্তরিত হবে, উদাহরণস্বরূপ:
1234567890 | 0 => 1234567890
12345678901 | 0 => -539222987
Math.floor()
হয়, দ্রুত হয় (কমপক্ষে গুগল ক্রোমে আপনার প্রথম জেএসপিআইপি পরীক্ষাটি চালানো অনুসারে , সংস্করণ 30.0.1599.101) আরও শক্তিশালী (কারণ এটি কীভাবে সংখ্যাগুলিকে বিটগুলিতে উপস্থাপন করা হয় তার উপর নির্ভর করে না, যা পরিবর্তিত হয়ে সম্ভবত এই বিটওয়াইস সমাধানটি ভেঙে দিতে পারে) এবং সর্বাধিক গুরুত্বপূর্ণভাবে আরও স্পষ্ট।
~~
এটি একটি unary অপারেটর কারণ ভাল। 4.2|0+4
সমান 4
তবে ~~4.2+4
সমান8
দ্রষ্টব্য: আপনি Math.floor()
কাটা কাটা প্রতিস্থাপন হিসাবে ব্যবহার করতে পারবেন না , কারণ Math.floor(-3.1) = -4
এবং না -3
!!
কাটা কাটের জন্য সঠিক প্রতিস্থাপনটি হ'ল:
function truncate(value)
{
if (value < 0) {
return Math.ceil(value);
}
return Math.floor(value);
}
Math.trunc(value)
ECMAScript 6
floor
-অনফিনিটির দিকে রাউন্ড, truncate
শূন্যের দিকে রাউন্ড। ( ceil
অসীমের দিকে গোল))
একটি ডাবল বিটওয়াইজ নন অপারেটর ফ্লোটগুলি কাটাতে ব্যবহার করা যেতে পারে। অন্যান্য অপারেশন আপনাকে উল্লেখ করেছে প্রাপ্তিসাধ্য মাধ্যমে হয় Math.floor
, Math.ceil
এবং Math.round
।
> ~~2.5
2
> ~~(-1.4)
-1
<canvas>
ফন্টের রেন্ডারিং ইঞ্জিনকে কোড গল্ফ করার জন্য আমার ঠিক এটি ছিল । ধন্যবাদ!
ছাঁটাইয়ের জন্য:
var intvalue = Math.floor(value);
রাউন্ডের জন্য:
var intvalue = Math.round(value);
কোনও গোল না করার জন্য আপনি পার্সিয়ান্ট পদ্ধতিটি ব্যবহার করতে পারেন । 0x (হেক্স) এবং 0 (অক্টাল) উপসর্গ বিকল্পগুলির কারণে ব্যবহারকারীর ইনপুট সম্পর্কে সতর্ক হন।
var intValue = parseInt(floatValue, 10);
parseInt(1000000000000000000000, 10);
1 টির ফলাফল 1 000 000 000 000 000 000 000. যাহাই হউক না কেন, প্রশ্ন স্পষ্টতই " স্ট্রিংয়ে রূপান্তর করতে এবং পার্সিং " চায়নি যদিও এটি তুলনামূলকভাবে সামান্য ...;)
parseInt()
একটি স্ট্রিংটিকে প্রথম পরামিতি হিসাবে সংখ্যা হিসাবে নয় বলে প্রত্যাশা করে । আপনি যখন এই পূর্ণসংখ্যাটি পাস করেন তখন এটি রূপান্তরিত হয় 1e21
এবং তারপরে parseInt
স্ট্রিংটিকে পার্স করে 1e21
, যার ফলস্বরূপ 1
।
বিট শিফট 0 দ্বারা যা 1 দ্বারা বিভাগের সমান
// >> or >>>
2.0 >> 0; // 2
2.0 >>> 0; // 2
>> 0
পূর্ণসংখ্যার <কেবল কাজ বলে মনে হয় 2 ^ 31-1 , এবং >>> 0
পূর্ণসংখ্যার <জন্য 2 ^ 32-1 । এটি বৃহত্তর মানগুলির জন্য 0 প্রদান করে
আপনার ক্ষেত্রে, আপনি যখন শেষের দিকে একটি স্ট্রিং চান (কমা সন্নিবেশ করার জন্য), আপনি কেবল Number.toFixed()
ফাংশনটিও ব্যবহার করতে পারেন , তবে এটি রাউন্ডিংটি সম্পাদন করবে।
এখানে অনেক পরামর্শ আছে। বিটওয়াইজ OR খুব সহজেই মনে হচ্ছে। এখানে আরও একটি সংক্ষিপ্ত সমাধান যা মডিউল অপারেটরটি ব্যবহার করে নেতিবাচক সংখ্যার সাথে কাজ করে। এটি বিটওয়াইজের চেয়ে বোঝা আরও সহজ বা:
intval = floatval - floatval%1;
এই পদ্ধতিটি উচ্চ মানের সংখ্যার সাথেও কাজ করে যেখানে '| 0' বা '~~' বা '>> 0' কোনওটিই সঠিকভাবে কাজ করে না:
> n=4294967295;
> n|0
-1
> ~~n
-1
> n>>0
-1
> n-n%1
4294967295
ছাঁটাই করতে :
// Math.trunc() is part of the ES6 spec
Math.trunc( 1.5 ); // returns 1
Math.trunc( -1.5 ); // returns -1
// Math.floor( -1.5 ) would return -2, which is probably not what you wanted
গোল করতে :
Math.round( 1.5 ); // 2
Math.round( 1.49 ); // 1
Math.round( -1.6 ); // -2
Math.round( -1.3 ); // -1
আর একটি সম্ভাব্য উপায় - এক্সওআর অপারেশন ব্যবহার করুন:
console.log(12.3 ^ 0); // 12
console.log("12.3" ^ 0); // 12
console.log(1.2 + 1.3 ^ 0); // 2
console.log(1.2 + 1.3 * 2 ^ 0); // 3
console.log(-1.2 ^ 0); // -1
console.log(-1.2 + 1 ^ 0); // 0
console.log(-1.2 - 1.3 ^ 0); // -2
বিটওয়াইজ অপারেশনগুলির অগ্রাধিকার কম তবে গণিত ক্রিয়াকলাপগুলির অগ্রাধিকার, এটি কার্যকর। Https://jsfiddle.net/au51uj3r/ এ চেষ্টা করুন
দেশীয় মধ্যে তাকান Math
জাভাস্ক্রিপ্টে অবজেক্টে , আপনি সংখ্যা এবং মান ইত্যাদিতে কাজ করার জন্য পুরো ফাংশনটি পাবেন ...
মূলত আপনি যা করতে চান তা জাভাস্ক্রিপ্টে বেশ সহজ এবং স্থানীয় ...
আপনার নীচের নম্বরটি কল্পনা করুন:
const myValue = 56.4534931;
এবং এখন আপনি যদি এটি নিকটতম সংখ্যায় গোল করতে চান, কেবল কেবল করুন:
const rounded = Math.floor(myValue);
এবং আপনি পান:
56
আপনি যদি এটি নিকটতম সংখ্যায় গোল করতে চান তবে কেবল করুন:
const roundedUp = Math.ceil(myValue);
এবং আপনি পান:
57
এছাড়াও Math.round
এটি আরও উচ্চ বা নিম্ন সংখ্যায় গোল করে এটি নির্ভর করে যে কোনটি ফ্লটের সংখ্যার নিকটে রয়েছে।
এছাড়াও আপনি ~~
ভাসা সংখ্যার পিছনে ব্যবহার করতে পারেন , এটি একটি ফ্লোটকে পুরো সংখ্যায় রূপান্তর করবে।
আপনি এটি ব্যবহার করতে পারেন ~~myValue
...
~~
কারণ যদি সংখ্যাটি 32 লিমিটের চেয়ে বড় হয় তবে এটি মানটি 32 সীমাতে পরিবর্তিত করবে।
//Convert a float to integer
Math.floor(5.95)
//5
Math.ceil(5.95)
//6
Math.round(5.4)
//5
Math.round(5.5)
//6
Math.trunc(5.5)
//5
//Quick Ways
console.log(5.95| 0)
console.log(~~5.95)
console.log(5.95 >> 0)
//5
আমি কেবল সেই মুদ্রণটি উল্লেখ করতে চাই যে আপনি গোল করতে চান, এবং কাটছে না। এক পয়সা দিয়ে বন্ধ থাকার সম্ভাবনা অনেক কম, কারণ যেহেতু ৪.৯৯৯45৫২ * ১০০ গোল হয়েছে আপনাকে ৫ টি দেওয়া হবে, আরও একটি প্রতিনিধি উত্তর।
এবং সর্বোপরি , ব্যাঙ্কারের বৃত্তাকার সম্পর্কে ভুলে যাবেন না , যা সোজা রাউন্ডিং দেয় এমন সামান্য ধনাত্মক পক্ষপাতের বিরুদ্ধে লড়াই করার একটি উপায় - আপনার আর্থিক প্রয়োগের প্রয়োজন হতে পারে।
আপনি যদি কৌণিক জাল ব্যবহার করছেন তবে এইচটিএমএল টেমপ্লেট বাইন্ডিংয়ের অনুসারে সহজ সমাধান
{{val | number:0}}
এটি ভালকে পূর্ণসংখ্যায় রূপান্তরিত করবে
এই লিঙ্কটি ডকস.আঙ্গুলারজেএস.আর.পিআই / এনজি / ফিল্টার / নাম্বার দিয়ে যান