2012-04-14 11 views
51

एक स्क्रिप्ट के लिए मैं लिख रहा हूं, मुझे एक संख्या प्रदर्शित करने की आवश्यकता है जो गोल किया गया है, लेकिन दशमलव या इसके पीछे कुछ भी नहीं। मैं इसे तीसरे स्थान पर घूमने के लिए नीचे आ गया हूं, लेकिन मुझे यकीन नहीं है कि दशमलव और उसके पीछे सब कुछ छोड़ने के बारे में कैसे जाना है, क्योंकि ऐसा लगता है कि जावास्क्रिप्ट में substr फ़ंक्शन जैसे PHP है।जावास्क्रिप्ट में पूर्ण संख्या को घुमाएं/गोल करें?

कोई सिफारिशें?

+2

पूर्णांकन और छोटा 2 अलग संचालन कर रहे हैं। आप कौन सी कोशिश कर रहे हैं? –

+0

'.substring()' जावास्क्रिप्ट में बिल्कुल एक फ़ंक्शन है। –

+2

** विधि कहा जाता है '.toFixed()' ** – neaumusic

उत्तर

96

आप एक स्ट्रिंग है, तो एक पूर्णांक के रूप में यह पार्स:

var num = '20.536'; 
var result = parseInt(num, 10); // 20 

अन्यथा, ECMAScript 6 प्रस्तावों Math.trunc पूरी तरह से संगत काट-छांट के लिए, पहले से ही Firefox में उपलब्ध 24 + और एज:

var num = -2147483649.536; 
var result = Math.trunc(num); // -2147483649 

यदि आप उस पर भरोसा नहीं कर सकते हैं और हमेशा सकारात्मक संख्या होगी, तो आप निश्चित रूप से Math.floor:

var num = 20.536; 
var result = Math.floor(num); // 20 
का उपयोग कर सकते हैं

और अंत में, यदि आपके पास [− 2147483648, 2147483647] में कोई संख्या है, तो आप किसी भी बिटवाई ऑपरेटर का उपयोग करके 32 बिट्स को छोटा कर सकते हैं। | 0 आम है, और >>> 0 एक अहस्ताक्षरित 32-बिट पूर्णांक प्राप्त करने के लिए इस्तेमाल किया जा सकता:

var num = -20.536; 
var result = num | 0; // -20 
+6

Math.floor() ऋणात्मक संख्याओं के लिए गलत परिणाम दे देंगे। बेहतर विकल्प के लिए नीचे मोजे के जवाब पर विचार करें। –

+0

@ जोनब्रुक: धन्यवाद, लेकिन मैंने शुरू करने के लिए 'parseInt' की अनुशंसा की। धीमे, जटिल विकल्पों के लिए मोज़े के जवाब पर विचार करें। – Ryan

+2

Mozey के 'trunc2' वास्तव में सही विकल्प है, प्लस यह स्ट्रिंग पार्स जो यह बहुत' parseInt' की तुलना में तेजी है, हमेशा सही परिणाम लौटने के साथ होगा बजाय पूर्णांक तुलना उपयोग करता है। – BlinkyTop

2

उपयोग Math.floor():

var f = 20.536; 
var i = Math.floor(f); // 20 

http://jsfiddle.net/J4UVV/1/

+1

आप एक ऋणात्मक संख्या का उपयोग करते हैं कहते हैं कि -20.536 तो आप काट-छांट के लिए गलत परिणाम के रूप में यह -21 http://jsfiddle.net/zL1v5e2k/ –

8

एक स्ट्रिंग को संख्या में कनवर्ट करें और दूर सब कुछ फेंक दशमलव के बाद।

trunc = function(n) { return Number(String(n).replace(/\..*/, "")) } 

trunc(-1.5) === -1 

trunc(1.5) === 1 

संपादित 2013-07-10

रूप minitech द्वारा बताया और दूसरे पर सोचा स्ट्रिंग विधि एक सा अत्यधिक प्रतीत होता है। तो विभिन्न तरीकों यहाँ और कहीं और सूचीबद्ध तुलना:

function trunc1(n){ return parseInt(n, 10); } 
function trunc2(n){ return n - n % 1; } 
function trunc3(n) { return Math[n > 0 ? "floor" : "ceil"](n); } 
function trunc4(n) { return Number(String(n).replace(/\..*/, "")); } 

function getRandomNumber() { return Math.random() * 10; } 

function test(func, desc) { 
    var t1, t2; 
    var ave = 0; 
    for (var k = 0; k < 10; k++) { 
     t1 = new Date().getTime(); 
     for (var i = 0; i < 1000000; i++) { 
      window[func](getRandomNumber()); 
     } 
     t2 = new Date().getTime(); 
     ave += t2 - t1; 
    } 
    console.info(desc + " => " + (ave/10)); 
} 

test("trunc1", "parseInt"); 
test("trunc2", "mod"); 
test("trunc3", "Math"); 
test("trunc4", "String"); 

परिणाम, हार्डवेयर के आधार पर भिन्न हो सकते हैं, इस प्रकार हैं:

parseInt => 258.7 
mod  => 246.2 
Math  => 243.8 
String => 1373.1 

Math.floor/प्लस्तर लगाना विधि मामूली तेजी से किया जा रहा है parseInt और mod। स्ट्रिंग अन्य तरीकों की तुलना में खराब प्रदर्शन करता है।

+0

'parseInt' और स्ट्रिंग प्रतिस्थापन में परिणाम की तुलना में बड़ी संख्या के लिए गलत उत्तरों वापस आ जाएगी मिल जाएगा 999999999999999900000. – Ryan

+0

इस अनुभव से मेरी ले दूर: जब तक प्रदर्शन एक बहुत बड़ा मुद्दा है, बस 'parseInt' सादगी के लिए उपयोग करते हैं, अन्यथा' trunc3() को लागू ' – RozzA

12

मैं अपना समाधान यहां जोड़ूंगा। हम मंजिल का उपयोग जब मान 0 और प्लस्तर लगाना ऊपर हैं कर सकते हैं जब वे कर रहे हैं शून्य से कम:

function truncateToInt(x) 
{ 
    if(x > 0) 
    { 
     return Math.floor(x); 
    } 
    else 
    { 
     return Math.ceil(x); 
    } 
} 

तब:

y = truncateToInt(2.9999); // results in 2 
y = truncateToInt(-3.118); //results in -3 
+2

मुझे समझ नहीं आता क्यों इस उत्तर downvoted किया गया था। यह एकमात्र सही तरीका है! – BlinkyTop

15
Mozey के trunc2 समारोह के साथ

ट्रैविस Pessetto का जवाब केवल सही जवाब, पर विचार कैसे थे जावास्क्रिप्ट वैज्ञानिक नोटेशन में बहुत छोटे या बहुत बड़े फ्लोटिंग पॉइंट नंबरों का प्रतिनिधित्व करता है।

उदाहरण के लिए, parseInt(-2.2043642353916286e-15) सही ढंग से उस इनपुट को पार्स नहीं करेगा।0 लौटने की बजाय यह -2 लौटाएगा।

यह सही है (और कम से कम पागल imho) जिस तरह से यह करने के लिए है:

function truncate(number) 
{ 
    return number > 0 
     ? Math.floor(number) 
     : Math.ceil(number); 
} 
+0

मेरे लिए Math.trunc (-2.2043642353916286e-15) शून्य लौटाता है। मैंने इसे https://www.typescriptlang.org/play/ में परीक्षण किया है – Devid