কিভাবে একটি সংখ্যার পুরো এবং দশমিক অংশ পাবেন?


100

দেওয়া হয়েছে, বলুন, 1.25 - আমি কীভাবে এই সংখ্যার "1" এবং "25" অংশ পেতে পারি?

দশমিক অংশ .0, .25, .5, বা .75 হয় কিনা তা আমাকে পরীক্ষা করে দেখতে হবে।


একটি সাধারণ বিস্ফোরণ কাজ করবে? $ splitDec = বিস্ফোরিত ("।", $ দশমিক); $ splitDec [0] এখন 1 এর মাধ্যমে এবং splitDec [1] এখন আপনার উদাহরণ থেকে 25 হবে।
ম্যাট

@ ম্যাট split()অবচিত করা হয়েছে been
অ্যালেক্স

@ আলেক্স হ্যাঁ, ভুলে গেছেন জাভাস্ক্রিপ্ট চিন্তা ছিল। বিস্ফোরিত হয়েছে।
ম্যাট

@ ম্যাট, বিভক্তিকে পিএইচপি ৫.৩ হিসাবে অবমূল্যায়ন করা হয়েছে এবং প্রকৃতপক্ষে এর আর্গ হিসাবে একটি রেজেক্স গ্রহণ করে, যেখানে বিস্ফোরণে একটি স্ট্রিং লাগে। এই ক্ষেত্রে বিস্ফোরণ () পছন্দ করা হয়।
শেলহেমার

4
explode(".",1.10);1 এবং 10 নয়, 1 এবং 1 দেবেন বলে জেনে থাকুন
মিশেল

উত্তর:


180
$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()
জেসন ম্যাকক্রিয়ারি

4
নেতিবাচক জন্য মেঝে অ্যাকাউন্ট কিভাবে?
ল্যান্সএইচ

@ ল্যান্সএইচ: এটি হয় না তবে আপনি এটি নেতিবাচক পতাকা দিয়ে খুব সহজেই এটি পরিচালনা করতে পারেন।
ব্র্যাড ক্রিস্টি

4
আপনি যদি একটি বৃত্তাকার () যোগ না করেন তবে এই উত্তরটি আসলে ভুল। বোবা লাগছে, আমি জানি, তবে এটি নিম্ন-স্তরের ভাসমান পয়েন্ট নম্বর পাটিগণিতের সাথে করতে হবে। এখানে দেখুন: স্ট্যাকওভারফ্লো.com
ম্যাথ-

510.9 দিয়ে চেষ্টা করুন, 0.89 ফেরান। তবে কেন বলতে পারছেন না।
T30

39

এই কোডটি এটি আপনার জন্য বিভক্ত করবে:

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

যেখানে $ পুরোটি সম্পূর্ণ সংখ্যা এবং $ দশমিক দশমিক দশকের পরে সংখ্যাগুলি থাকে।


10
explode(".",1.10);1 এবং 10 নয়, 1 এবং 1 দেবেন বলে জেনে থাকুন
মিশেল

4
সংখ্যাটি পূর্ণসংখ্যা হয় বা দশমিক অংশ না রাখলে এটি অপরিজ্ঞাত সূচক সম্পর্কে সতর্কতা ভঙ্গ করে এবং নিক্ষেপ করে।
Andreyco

4
এটি ধরে নিয়েছে যে স্ট্রিংয়ে কাস্ট করার সময় এই সংখ্যাটি বৈজ্ঞানিক স্বরলিপিতে প্রতিনিধিত্ব করা শেষ হবে না। যদি এটি সত্যিই বিশাল বা সত্যই ক্ষুদ্র সংখ্যা হয় তবে এটি হবে না এবং এই পদ্ধতিটি ভেঙে যাবে।
গর্ডনএম

যখন আপনার নম্বরটি এটি কাজ করে না: $ মান = 10000000000000.00011111;
হামিদ নাগিপুর

20

শুধু আলাদা হতে :)

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

কোডপ্যাড

একটি অতিরিক্ত সুবিধা হিসাবে, এটি কেবল তখনই বিভক্ত হবে যেখানে উভয় পক্ষই সংখ্যার সমন্বয়ে গঠিত।


4
সংখ্যায় দশমিক অংশ না থাকলে এটি ভাঙবে না। দুর্দান্ত!
Andreyco

চমৎকার যে এটি দুটি পূর্ণসংখ্যার ফলাফল দেয়; বরং কোনও ইনট এবং ফ্লোটের চেয়ে।
ফুচো

4
এটি ধরে নিয়েছে যে স্ট্রিংয়ে কাস্ট করার সময় সংখ্যাটি বৈজ্ঞানিক স্বরলিপিতে প্রতিনিধিত্ব করা শেষ হবে না। যদি এটি সত্যিই বিশাল বা সত্যই ক্ষুদ্র সংখ্যা হয় তবে এটি হবে না এবং এই পদ্ধতিটি ভেঙে যাবে।
গর্ডনএম

এবং সংখ্যাটি এর মতো হলে এটি একটি ডোজ কাজ করে না: = মান = 10000000000000.00011111;
হামিদ নাগিপুর

19

মেঝে () পদ্ধতিটি নেতিবাচক সংখ্যার জন্য কাজ করে না। এটি প্রতিবার কাজ করে:

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

... নেতিবাচক (একই কোড, বিভিন্ন সংখ্যা) এর জন্যও কাজ করে:

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

যখন সংখ্যাটি $ মান = 10000000000000.00011111 এর মতো কিছু হয়; এটি খুব বেশি কাজ করে না
হামিদ নাগিপুর

9

একটি ছোট উপায় (মেঝে এবং fmod ব্যবহার করুন)

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

তারপরে $ দশমিক 0, .25, .5, বা .75 এর সাথে তুলনা করুন


আমি এই উত্তর গ্রহণ! এটি সি # এর কাছাকাছি (a % 1)এবং এটি নেতিবাচক সংখ্যাগুলি পরিচালনা করে।
বিটারব্লিউ

7

এটি কোনও অন্তর্নিহিত এবং বিয়োগ হিসাবে কাস্ট করুন

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

বা কেবল তুলনার জন্য দশমিক পেতে

$decimal = $your_number - (int)$your_number

5

এখানে একটি ফেমড ফাংশনও রয়েছে, এটি ব্যবহার করা যেতে পারে: fmod ($ my_var, 1) একই ফলাফলটি ফিরিয়ে দেবে, তবে কিছু সময় একটি ছোট গোল ত্রুটির সাথে।


4

পিএইচপি 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;
}

এটি তার পদ্ধতির সমান তবে খাটো এবং আশা করি এর ফলস্বরূপ বুঝতে আরও সহজ to



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, ঘন্টা এবং মিনিটের মধ্যে আলাদাভাবে একটি ডেট ইন্টেরওয়াল উদাহরণ হিসাবে 96 ঘন্টা 15 মিনিটের হিসাবে বিভক্ত করতে পারে । আমি নিম্নলিখিত হিসাবে এটি করেছি:

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

আমি আমার ক্ষেত্রে সেকেন্ডের যত্ন নিই না।


-3
val = -3.1234

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

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