किसी संख्या का संपूर्ण और दशमलव भाग कैसे प्राप्त करें?


98

यह देखते हुए, 1.25 - मुझे इस नंबर के "25" और "25" भाग कैसे मिलते हैं?

मुझे यह जाँचने की आवश्यकता है कि दशमलव भाग .0, .25, .5, या .75 है या नहीं।


क्या एक सरल विस्फोट काम करेगा? $ विभाजन = विस्फोट ("।", $ दशमलव); $ स्प्लिटडेक [0] अब 1 से विभाजित हो जाएगा और स्प्लिटडेक [1] अब आपके उदाहरण से 25 हो जाएगा।
मैट

@Matt split()को हटा दिया गया है।
एलेक्स

@alex yea, भूल गए। सोच रहा था जावास्क्रिप्ट। विस्फोट हो गया।
मैट

@Matt, विभाजन को 5.3 PHP के रूप में चित्रित किया गया है और वास्तव में इसके arg के रूप में एक regex लेता है, जबकि विस्फोट एक स्ट्रिंग लेता है। इस मामले में विस्फोट () को प्राथमिकता दी जाती है।
शेल्मर

4
विदित हो कि explode(".",1.10);wil 1 और 1 दे, 1 और 10 नहीं
मिशेल

जवाबों:


177
$n = 1.25;
$whole = floor($n);      // 1
$fraction = $n - $whole; // .25

फिर 1/4, 1/2, 3/4, आदि के खिलाफ तुलना करें।


नकारात्मक संख्या के मामलों में, इसका उपयोग करें:

function NumberBreakdown($number, $returnUnsigned = false)
{
  $negative = 1;
  if ($number < 0)
  {
    $negative = -1;
    $number *= -1;
  }

  if ($returnUnsigned){
    return array(
      floor($number),
      ($number - floor($number))
    );
  }

  return array(
    floor($number) * $negative,
    ($number - floor($number)) * $negative
  );
}

$returnUnsignedबनाने से रोकता है -1.25 करने के लिए -1 और -0.25


7
एक तरफ के रूप में, intval()या साधारण कास्टिंग की (int)तुलना में अधिक प्रदर्शनकारी हो सकता हैfloor()
जेसन मैकक्रेरी

1
कैसे नकारात्मक के लिए मंजिल खाता है?
लांसएच

@ लांस: यह नहीं है, लेकिन आप इसे एक नकारात्मक झंडे के साथ बहुत आसानी से संभाल सकते हैं।
ब्रैड क्रिस्टी

4
यह उत्तर वास्तव में गलत है जब तक आप एक राउंड () नहीं जोड़ते। गूंगा लगता है, मुझे पता है, लेकिन यह निम्न-स्तरीय फ्लोटिंग पॉइंट संख्या अंकगणित के साथ करना है। यहाँ देखें: stackoverflow.com/questions/3726721/php-math-precision
मैट जेम्स

510.9 के साथ प्रयास करें, 0.89 देता है। लेकिन क्यों नहीं बता सकता।
T30

38

यह कोड आपके लिए इसे अलग कर देगा:

list($whole, $decimal) = explode('.', $your_number);

जहाँ $ पूरी पूरी संख्या है और $ दशमलव में दशमलव बिंदु के बाद अंक होंगे।


9
विदित हो कि explode(".",1.10);wil 1 और 1 दे, 1 और 10 नहीं
मिशेल

3
यह टूटता है और अपरिभाषित सूचकांक के बारे में चेतावनी देता है, यदि संख्या पूर्णांक है या दशमलव भाग नहीं है।
आंद्रेइको

1
यह मानता है कि संख्या को स्ट्रिंग में डाले जाने पर वैज्ञानिक संकेतन में प्रतिनिधित्व नहीं किया जा रहा है। यदि यह वास्तव में बहुत बड़ा है या वास्तव में बहुत छोटी संख्या है, तो यह मामला नहीं होगा और यह विधि टूट जाएगी।
गॉर्डन 8

20

बस अलग होने के लिए :)

list($whole, $decimal) = sscanf(1.5, '%d.%d');

कोडपैड

अतिरिक्त लाभ के रूप में, यह केवल विभाजित होगा जहां दोनों पक्ष अंक से मिलकर होते हैं।


2
यह एक नहीं टूटता है यदि संख्या में दशमलव भाग शामिल नहीं है। महान!
आंद्रेइको

अच्छा लगा कि यह दो पूर्णांकों का उत्पादन करता है; एक अंतर और एक फ्लोट के बजाय।
foochow

1
यह मानता है कि संख्या को स्ट्रिंग में डाले जाने पर वैज्ञानिक संकेतन में प्रतिनिधित्व नहीं किया जा रहा है। यदि यह वास्तव में बहुत बड़ा है या वास्तव में बहुत छोटी संख्या है, तो यह मामला नहीं होगा और यह विधि टूट जाएगी।
गॉर्डन मॉस

18

फर्श () विधि नकारात्मक संख्याओं के लिए काम नहीं करती है। यह हर बार काम करता है:

$num = 5.7;
$whole = (int) $num;  // 5
$frac  = $num - $whole;  // .7

... नकारात्मक (समान कोड, भिन्न संख्या) के लिए भी काम करता है:

$num = -5.7;
$whole = (int) $num;  // -5
$frac  = $num - $whole;  // -.7

8

एक छोटा रास्ता (उपयोग मंजिल और fmod)

$var = "1.25";
$whole = floor($var);     // 1
$decimal = fmod($var, 1); //0.25

फिर $ दशमलव को 0, .25, .5, या .75 से तुलना करें


मैं इस जवाब को स्वीकार करता हूं! यह C # के करीब है (a % 1)और यह नकारात्मक संख्याओं को अच्छी तरह से संभालता है।
बिटरब्लू

7

इसे एक इंट के रूप में कास्ट करें और घटाएं

$integer = (int)$your_number;
$decimal = $your_number - $integer;

या सिर्फ तुलना के लिए दशमलव प्राप्त करने के लिए

$decimal = $your_number - (int)$your_number

5

एक fmod फ़ंक्शन भी है, जिसका उपयोग किया जा सकता है: fmod ($ my_var, 1) एक ही परिणाम लौटाएगा, लेकिन कभी-कभी एक छोटी सी गोल त्रुटि के साथ।


3

PHP 5.4+

$n = 12.343;
intval($n); // 12
explode('.', number_format($n, 1))[1]; // 3
explode('.', number_format($n, 2))[1]; // 34
explode('.', number_format($n, 3))[1]; // 343
explode('.', number_format($n, 4))[1]; // 3430


1

ब्रैड क्रिस्टी का तरीका अनिवार्य रूप से सही है लेकिन इसे अधिक संक्षिप्त रूप से लिखा जा सकता है।

function extractFraction ($value) 
{
    $fraction   = $value - floor ($value);
    if ($value < 0)
    {
        $fraction *= -1;
    }

    return $fraction;
}

यह उसकी विधि के बराबर है लेकिन परिणाम के रूप में छोटा और उम्मीद के मुताबिक समझना आसान है।



1

यदि आप हमेशा 2 दशमलव स्थानों पर इसे गिन सकते हैं, तो आप एक स्ट्रिंग ऑपरेशन का उपयोग कर सकते हैं:

$decimal = 1.25;
substr($decimal,-2);  // returns "25" as a string

प्रदर्शन का कोई विचार नहीं है लेकिन मेरे साधारण मामले के लिए यह बहुत बेहतर था ...


नोट: यदि आप ऐसा करते हैं, तो आपको कम से कम गोल ($ दशमलव, 2) का उपयोग करना चाहिए; पहले यह सुनिश्चित करने के लिए कि आपके पास दशमलव के रूप में केवल दो अंक हैं। लेकिन अगर आप सही गणित रखना चाहते हैं या पैसे संभालना चाहते हैं तो आप इसका इस्तेमाल नहीं कर सकते।
उल्रिक मैकआर्डल

0

अतिरिक्त फ्लोट दशमलव (यानी 50.85 - 50 दे 0.850000000852) को रोकने के लिए, मेरे मामले में मुझे पैसे सेंट के लिए केवल 2 दशमलव की आवश्यकता है।

$n = 50.85;
$whole = intval($n);
$fraction = $n * 100 % 100;

0

मुझे वास्तव में डॉलर की राशि और दशमलव के बाद की राशि को अलग करने का एक रास्ता खोजने में मुश्किल समय हो रहा था। मुझे लगता है कि मैंने इसे ज्यादातर समझ लिया था और सोचा था कि अगर किसी तरह की कोई परेशानी हो रही है तो उसे साझा करना चाहिए

तो मूल रूप से...

अगर कीमत 1234.44 है ... पूरी 1234 होगी और दशमलव 44 या होगा

अगर कीमत 1234.01 है ... पूरी 1234 होगी और दशमलव 01 या होगा

अगर कीमत 1234.10 है ... पूरी 1234 होगी और दशमलव 10 होगी

इत्यादि

$price = 1234.44;

$whole = intval($price); // 1234
$decimal1 = $price - $whole; // 0.44000000000005 uh oh! that's why it needs... (see next line)
$decimal2 = round($decimal1, 2); // 0.44 this will round off the excess numbers
$decimal = substr($decimal2, 2); // 44 this removed the first 2 characters

if ($decimal == 1) { $decimal = 10; } // Michel's warning is correct...
if ($decimal == 2) { $decimal = 20; } // if the price is 1234.10... the decimal will be 1...
if ($decimal == 3) { $decimal = 30; } // so make sure to add these rules too
if ($decimal == 4) { $decimal = 40; }
if ($decimal == 5) { $decimal = 50; }
if ($decimal == 6) { $decimal = 60; }
if ($decimal == 7) { $decimal = 70; }
if ($decimal == 8) { $decimal = 80; }
if ($decimal == 9) { $decimal = 90; }

echo 'The dollar amount is ' . $whole . ' and the decimal amount is ' . $decimal;

-1

यहाँ एक साधारण मापांक नहीं देखा ...

$number         = 1.25;
$wholeAsFloat   = floor($number);   // 1.00
$wholeAsInt     = intval($number);  // 1
$decimal        = $number % 1;      // 0.25

इस मामले में दोनों मिल रहे हैं $wholeAs?और $decimalदूसरे पर निर्भर नहीं हैं। (आप स्वतंत्र रूप से 3 में से 1 आउटपुट ले सकते हैं।) मैंने दिखाया है $wholeAsFloatऔर $wholeAsIntक्योंकिfloor() एक फ्लोट प्रकार की संख्या देता है, भले ही यह संख्या हमेशा पूरी हो। (यह महत्वपूर्ण है यदि आप परिणाम को टाइप-हिंटेड फ़ंक्शन पैरामीटर में पास कर रहे हैं।)

मैं चाहता था कि यह एक फ़्लोटिंग पॉइंट संख्या को घंटे / मिनट, जैसे कि 96.25, घंटों और मिनटों में अलग-अलग कर ले और DateInterval उदाहरण के लिए 96 घंटे 15 मिनट। मैंने इस प्रकार किया:

$interval = new \DateInterval(sprintf("PT%dH%dM", intval($hours), (($hours % 1) * 60)));

मैंने अपने मामले में सेकंड की परवाह नहीं की।


-3
val = -3.1234

fraction = abs(val - as.integer(val) ) 

2
नमस्ते, कोड के साथ थोड़ा स्पष्टीकरण भी जोड़ें क्योंकि यह आपके कोड को समझने में मदद करता है। कोड केवल जवाब पर frowned हैं।
भार्गव राव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.