কীভাবে 2 ইন্টের বিভাজনটি আরও একটি ইন্টের পরিবর্তে একটি ফ্লোট উত্পাদন করবে?


149

ব্রুস এক্কেলস গতিবেগের গণনা করার অনুশীলনে, v = s / tযেখানে গুলি এবং টিগুলি পূর্ণসংখ্যা হয়। আমি কীভাবে এটি তৈরি করব যাতে বিভাগটি ভাসা ভাসাচ্ছে?

class CalcV {
  float v;
  float calcV(int s, int t) {
    v = s / t;
    return v;
  } //end calcV
}

public class PassObject {

  public static void main (String[] args ) {
    int distance;
    distance = 4;

    int t;
    t = 3;

    float outV;

    CalcV v = new CalcV();
    outV = v.calcV(distance, t);

    System.out.println("velocity : " + outV);
  } //end main
}//end class

ভাসা v = গুলি / টি বিভাগ সম্পাদন করে তারপরে ফলটিকে একটি ফ্লোটে রূপান্তরিত করে। float v = (float) s / t কাস্টগুলি ভাসতে তারপরে বিভাগ সম্পাদন করে।
হুয়ান কার্লোস ইতুরিয়াগোগোটিয়া

উত্তর:


307

দুটি অপারেটরগুলির মধ্যে একটিকে প্রথমে একটি ফ্লোটে কাস্ট করুন।

v = (float)s / t;

Castালাই বিভাগের চেয়ে উচ্চতর প্রাধান্য পায়, তাই বিভাগের আগে ঘটে।

সংকলক দ্বারা অপারেটরটি কার্যকরভাবে স্বয়ংক্রিয়ভাবে একটি ফ্লোটে ফেলে দেওয়া হবে কারণ নিয়ম অনুসারে অপারেন্ডটি যদি ভাসমান পয়েন্ট টাইপের হয় তবে অপারেশনটি একটি ভাসমান বিন্দু অপারেশন হবে, অন্য অপারেন্ডটি অবিচ্ছেদ্য থাকলেও। জাভা ভাষার নির্দিষ্টকরণ, §4.2.4 এবং .115.17


8
গ্রার, আমি এটি খুঁজে পেতে এবং এটি বের করার আগ পর্যন্ত এটি প্রায় 30 মিনিট সময় নিয়েছিল। খুবই সোজা. : ডি
রিহার্ডস

আরও সুনির্দিষ্টভাবে, এই নির্দিষ্ট বিধিটি এখানে উল্লেখ করা হয়েছে: গুণক অপারেটর , সুতরাং এটি ভবিষ্যতের রেফারেন্সের জন্য এখানে দাঁড়াতে দিন।
কোয়ান্টাম

5
(এই প্রশ্ন পরে জুড়ে আসছে কারো জন্য দেওয়া লিঙ্ক ভাঙা হয় নতুন কিছু আছেন:। Docs.oracle.com/javase/specs/jls/se7/html/jls-4.html#jls-4.2.4 এবং ডক্স। oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.17 )
স্টিভ হ্যালি

13

চেষ্টা করুন:

v = (float)s / (float)t;

Ints ফ্লোটে কাস্ট করা ভাসমান-পয়েন্ট বিভাগের অনুমতি দেবে।

যদিও আপনাকে কেবল একটি কাস্ট করা দরকার।


আমি জানি না, এটি বলার মতো যা আপনার অন্তর্নিহিতের পরিবর্তে দীর্ঘতর ব্যবহার করা উচিত।
জাকুব জাভেরকা

4

ভাসমান পয়েন্ট গণিতের সাথে অপারেশনটি করতে বাধ্য করার জন্য একটি পূর্ণসংখ্যাটিকে একটি ফ্লোটে কাস্ট করুন। অন্যথায় পূর্ণসংখ্যার গণিত সর্বদা পছন্দ করা হয়। তাই:

v = (float)s / t;


3

আপনি ভাসতে অঙ্ক বা ডিনোমিনেটর কাস্ট করতে পারেন ...

int ক্রিয়াকলাপগুলি সাধারণত int হয়, সুতরাং আপনাকে অপারেটিং নম্বরগুলির মধ্যে একটি পরিবর্তন করতে হবে।


1
সাধারণত? যদি তারা কিছুটা ফিরে আসে তবে তারা ইনট্রে ফিরে যাবে।
ম্যাথু ফ্ল্যাশেন

3

আপনি তাদের মধ্যে একটি মাত্র কাস্ট করতে পারেন, তবে ধারাবাহিকতার জন্য আপনি উভয়কে স্পষ্টতই কাস্ট করতে চাইতে পারেন যাতে ভি = (ফ্লোট) এস / (ফ্লোট) টির মতো কিছু কাজ করা উচিত।


1

জেএলএস স্ট্যান্ডার্ড

জেএলএস 7 15.17.2। বিভাগ অপারেটর / বলেছেন:

পূর্ণসংখ্যা বিভাগ 0 এর দিকে ঘুরবে That এটি, বাইনারি সংখ্যার প্রচার (§5.6.2) এর পরে পূর্ণসংখ্যাগুলি অপারেন্ডস n এবং d এর জন্য উত্পাদিত ভাগফলটি একটি পূর্ণসংখ্যার মান q, যার परिमाण সন্তুষ্ট করার সময় যথাসম্ভব বৃহত্তর | d · q | ≤ | এন | তদ্ব্যতীত, Q যখন ইতিবাচক তখন | এন | ≥ | d | এবং n এবং d এর একই চিহ্ন রয়েছে, তবে Q | negativeণাত্মক হলে | n | ≥ | d | এবং n এবং d এর বিপরীত চিহ্ন রয়েছে।

এই কারণেই 1/2কোনও ভাসা দেয় না।

কেবলমাত্র একজনকে পর্যাপ্ত হিসাবে ভাসতে রূপান্তর করা (float)1/2কারণ 15.17। গুণক অপারেটররা বলেছেন:

বাইনারি সংখ্যার প্রচার অপারেশনগুলিতে সম্পাদিত হয়

এবং 5.6.2। বাইনারি সংখ্যার প্রচার বলছে:

  • উভয় অপারেন্ড যদি ডাবল টাইপের হয় তবে অন্যটি ডাবল রূপান্তরিত হয়।
  • অন্যথায়, যদি অপরেন্দ্র টাইপ ফ্লোটের হয় তবে অন্যটি ফ্লোটে রূপান্তরিত হয়

0

ভাসমান পয়েন্ট ম্যাথ দিয়ে অপারেশনটি করতে বাধ্য করতে পূর্ণসংখ্যার দুটি / উভয় পূর্ণসংখ্যাকে ভাসান Cast অন্যথায় পূর্ণসংখ্যার ম্যাথ সর্বদা পছন্দ করা হয়। তাই:

1. v = (float)s / t;
2. v = (float)s / (float)t;

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