آموزش برنامه نویسی

آمیختن int و double و تبدیل نوع

شنبه, ۱۲ مرداد ۱۳۹۲، ۰۲:۱۷ ق.ظ

بارها پیش می آید که در برنامه خود نیاز به نوع int و double دارید. برای مثال نگه داری حاصل جمع اعداد 1 تا 1000 در یک متغیر int و نگه داری میانگین آنها در یک متغیر double . در این مواقع باید در مورد آمیختن نوع های مختلف با یکدیگر، به شدت دقت کرد. این نکته را هم در نظر داشته باشید که اعمال عملگرهای محاسباتی بر روی دو عدد از نوع int مقداری int را تولید می کند. در مورد اعداد double مقدار بدست آمده از نوع double است. به مثال زیر دقت کنید.

1 / 2 -> 0     ,     1.0 / 2.0 -> 0.5

همچنین اعمال عملگرهای محاسباتی بر روی دو عدد، یکی از نوع int و دیگری از نوع double به تولید نوع double می انجامد.

مثال:

1.0 / 2 -> 0.5     ,     1 / 2.0 -> 0.5

شما می توانید یک مقدار int را به یک متغیر double اختصاص دهید. مقدار int به صورت خودکار به مقدار double تبدیل می شود.

مثال:

int i = 3;
double d;
d = i;    // 3 → 3.0, d = 3.0
d = 88;   // 88 → 88.0, d = 88.0
double nought = 0;  // 0 → 0.0; there is a subtle difference between int 0 and double 0.0

اما یک مقدار double را نمی توان مستقیما به یک متغیر int اختصاص داد. به این دلیل که قسمت اعشاری مقدار double را از دست می دهید. در این حالت کامپایلر پیغامی را برای هشدار به شما نمایش می دهد.

double d = 5.5;
int i;
i = d;     // error: possible loss of precision
i = 6.6;   // error: possible loss of precision

عملگرهای تبدیل نوع

برای اختصاص یک مقدار double به یک متغیر int باید به صورت صریح عملگر تبدیل نوع را برای بریدن قسمت اعشاری فراخوانی کنید. برای این کار به شکل زیر عمل کنید.

(new-type)expression;

مثال:

double d = 5.5;
int i;
i = (int) d;        // Type-cast the value of double d, which returns an int value,
                    // assign the resultant int value to int i.
                    // The value stored in d is not affected.
i = (int) 3.1416;   // i = 3

به عنوان تمرین برنامه زیر را امتحان و صحت خروجی آن را بررسی کنید...

/*
 * Find the sum and average from a lowerbound to an upperbound
 */
public class TypeCastingTest {   // Save as "TypeCastingTest.java"
   public static void main(String[] args) {
      int lowerbound = 1, upperbound = 1000;
      int sum = 0;      // sum is "int"
      double average;   // average is "double"
      // Compute the sum (in "int")
      int number = lowerbound;
      while (number <= upperbound) {
         sum = sum + number;
         ++number;
      }
      System.out.println("The sum from " + lowerbound + " to " + upperbound + " is " + sum);
      // Compute the average (in "double")
      average = sum / (upperbound - lowerbound + 1);
      System.out.println("Average 1 is " + average);
      average = (double)sum / (upperbound - lowerbound + 1);
      System.out.println("Average 2 is " + average);
      average = sum / 1000;
      System.out.println("Average 3 is " + average);
      average = sum / 1000.0;
      System.out.println("Average 4 is " + average);
      average = (double)(sum / 1000);
      System.out.println("Average 5 is " + average);
   }
}
  • امین بهرامی

نظرات (۰)

هیچ نظری هنوز ثبت نشده است
ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی