উত্তর:
দুটি অপারেন্ড (1 এবং 3) পূর্ণসংখ্যা, সুতরাং পূর্ণসংখ্যার গাণিতিক (এখানে বিভাগ) ব্যবহৃত হয়। ফলাফলের পরিবর্তনশীলটিকে দ্বিগুণ হিসাবে ঘোষণা করা কেবল বিভাগের পরে একটি অন্তর্নিহিত রূপান্তর ঘটায় ।
অবশ্যই পূর্ণসংখ্যা বিভাগ শূন্যের দিকে গোল করে বিভাগের আসল ফলাফল দেয় returns ফলাফলটি 0.333...
এখানে 0 এর নিচে বৃত্তাকার হয়। (নোট করুন যে প্রসেসরটি আসলে কোনও রাউন্ডিং করে না, তবে আপনি এখনও সেভাবে এটি ভাবতে পারেন))
এছাড়াও, নোট করুন যে উভয় অপারেন্ড (সংখ্যা) যদি ভাসমান হিসাবে দেওয়া হয়; 3.0.০ এবং ১.০ বা এমনকি প্রথমটি , তারপরে ভাসমান-পয়েন্ট গাণিতিক ব্যবহার করা হয়, আপনাকে দেওয়া 0.333...
।
DOWN
শূন্য দিকে হয়। বৃত্তাকারটি FLOOR
নেতিবাচক অসীমের দিকে।
1/3
উভয় পক্ষই পূর্ণসংখ্যা হিসাবে পূর্ণসংখ্যা বিভাগ ব্যবহার করে।
আপনার মধ্যে অন্তত একটি হতে হবে float
বা হতে হবে double
।
আপনি যদি আপনার প্রশ্নের মতো উত্স কোডটিতে মানগুলি প্রবেশ করিয়ে থাকেন তবে আপনি এটি করতে পারেন 1.0/3
; 1.0
একটি ডবল হয়।
আপনি অন্য কোথাও থেকে মানগুলি করুন আপনি ব্যবহার করতে পারেন (double)
ঘুরে int
একটি মধ্যে double
।
int x = ...;
int y = ...;
double value = ((double) x) / y;
স্পষ্টভাবে এটি হিসাবে কাস্ট double
double g = 1.0/3.0
এটি ঘটায় কারণ জাভা পূর্ণসংখ্যা বিভাগ অপারেশনটি ব্যবহার করে 1
এবং 3
যেহেতু আপনি তাদের পূর্ণসংখ্যার ধ্রুবক হিসাবে প্রবেশ করেছেন।
আপনার ব্যবহার করা উচিত
double g=1.0/3;
অথবা
double g=1/3.0;
পূর্ণসংখ্যা বিভাগ পূর্ণসংখ্যা প্রদান করে।
কারণ আপনি পূর্ণসংখ্যা বিভাগ করছেন।
@ নলডোরিন যেমন বলেছেন, উভয় অপারেটর যদি পূর্ণসংখ্যা হয় তবে পূর্ণসংখ্যা বিভাগটি ব্যবহৃত হয়।
০.৩৩৩৩৩৩৩৩ ফলাফলটি পূর্ণসংখ্যা হিসাবে প্রতিনিধিত্ব করতে পারে না, সুতরাং ফলাফলের জন্য কেবল পূর্ণসংখ্যার অংশ (0) বরাদ্দ করা হয়।
অপারেটরগুলির মধ্যে যদি কোনও একজন double
/ হয় float
তবে ভাসমান পয়েন্ট গণিতটি সংঘটিত হবে। তবে আপনি যদি এটি করেন তবে আপনার একই সমস্যা হবে:
int n = 1.0 / 3.0;
কারণ এটি 1 এবং 3টিকে পূর্ণসংখ্যার হিসাবে বিবেচনা করে, সুতরাং ফলাফলটিকে 0 এর চেয়ে কম করে, যাতে এটি একটি পূর্ণসংখ্যা হয়।
আপনি যে ফলাফলটি সন্ধান করছেন তা পেতে, স্পষ্টভাবে জাভাটিকে বলুন যে সংখ্যাগুলি এর মতো দ্বিগুণ:
double g = 1.0/3.0;
জাভাতে রূপান্তরটি বেশ সহজ তবে কিছুটা বোঝার দরকার। পূর্ণসংখ্যার ক্রিয়াকলাপগুলির জন্য জেএলএস-তে ব্যাখ্যা হিসাবে :
যদি শিফট অপারেটর ব্যতীত কোনও পূর্ণসংখ্যার অপারেটরের টাইপ কমপক্ষে একটি অপারেন্ড থাকে তবে 64৪-বিট নির্ভুলতা ব্যবহার করে অপারেশনটি করা হয়, এবং সংখ্যাসূচক অপারেটরের ফলাফলটি টাইপ দীর্ঘ। অন্য অপারেন্ডটি দীর্ঘ না হলে সংখ্যার প্রচার (§5.6) দ্বারা দীর্ঘ টাইপ করতে প্রথমে এটি প্রশস্ত করা হয় (.15.1.5)।
এবং একটি উদাহরণ সর্বদা জেএলএস অনুবাদ করার সর্বোত্তম উপায়;)
int + long -> long
int(1) + long(2) + int(3) -> long(1+2) + long(3)
অন্যথায়, অপারেশনটি 32-বিট নির্ভুলতা ব্যবহার করে পরিচালিত হয় এবং সংখ্যার অপারেটরের ফলাফলটি টাইপ ইন্টের হয়। যদি উভয় অপরেন্ড কোনও অন্তর্নির্মিত না হয় তবে এটি প্রথমে সংখ্যার প্রচারের মাধ্যমে টাইপ করতে প্রসারিত হবে।
short + int -> int + int -> int
Eclipse ব্যবহার করে একটি ছোট উদাহরণটি দেখানোর জন্য যে দুটি short
এর যোগও এত সহজ হবে না:
short s = 1;
s = s + s; <- Compiling error
//possible loss of precision
// required: short
// found: int
এটিতে নির্ভুলতার সম্ভাব্য ক্ষতি সহ একটি কাস্টিং প্রয়োজন।
একই ভাসমান পয়েন্ট অপারেটরদের ক্ষেত্রে সত্য
যদি সংখ্যার অপারেটরের কমপক্ষে অপারেটরগুলির মধ্যে একটি টাইপ দ্বিগুণ হয়, তবে 64৪-বিট ভাসমান-পয়েন্ট পাটিগণিত ব্যবহার করে অপারেশনটি করা হয়, এবং সংখ্যাসূচক অপারেটরের ফলাফল টাইপের দ্বিগুণ একটি মান। অন্য অপারেন্ডটি যদি ডাবল না হয় তবে প্রথমে সংখ্যার প্রচার (§5.6) দ্বারা ডাবল টাইপ করতে এটি প্রশস্ত করা হবে (.15.1.5)।
সুতরাং পদোন্নতিটি ভাসমানটিতে দ্বিগুণ হয়ে গেছে।
এবং পূর্ণসংখ্যা এবং ভাসমান মান উভয়ের মিশ্রণ ফলশ্রুতিতে প্রাপ্ত মান হিসাবে ফল হিসাবে বলে
যদি বাইনারি অপারেটরের কমপক্ষে অপারেটরগুলির একটি ফ্লোটিং-পয়েন্ট টাইপের হয় তবে অপারেশনটি একটি ভাসমান-পয়েন্ট অপারেশন, অন্যটি অবিচ্ছেদ্য হলেও even
এটি বাইনারি অপারেটরদের ক্ষেত্রে সত্য তবে "এসাইনমেন্ট অপারেটর" পছন্দ নয় +=
এটি প্রমাণ করার জন্য একটি সাধারণ কাজের উদাহরণই যথেষ্ট
int i = 1;
i += 1.5f;
কারণটি হ'ল এখানে একটি নিখুঁত কাস্ট সম্পন্ন হয়েছে, এটি কার্যকর হবে exec
i = (int) i + 1.5f
i = (int) 2.5f
i = 2
সবচেয়ে সহজ সমাধানটি কেবল এটি করা
double g = ((double) 1 / 3);
এটি কী করে, যেহেতু আপনি ১.০ / ..০ প্রবেশ করেননি, তাই জাভা ধরে নিয়েছে যে এটি পূর্ণসংখ্যা বিভাগ, এবং এটি রূপান্তরকে সঙ্কুচিত করার অর্থ এমনকি এটি করবে since একে বলা হয় কাস্ট অপারেটর।
আমি এটা করেছি.
double g = 1.0/3.0;
System.out.printf("%gf", g);
ডাবল গণনা করার সময় .0 ব্যবহার করুন বা অন্যথায় জাভা ধরে নেবে আপনি পূর্ণসংখ্যার ব্যবহার করছেন। যদি কোনও গণনা কোনও পরিমাণে দ্বৈত মান ব্যবহার করে তবে আউটপুটটি দ্বিগুণ হবে। যদি সমস্তটি পূর্ণসংখ্যা হয় তবে আউটপুটটি একটি পূর্ণসংখ্যা হবে।
(১/৩) এর অর্থ পূর্ণসংখ্যা বিভাগ, কেন আপনি এই বিভাগ থেকে দশমিক মান পাবেন না ts এই সমস্যা সমাধানের জন্য ব্যবহার করুন:
public static void main(String[] args) {
double g = 1.0 / 3;
System.out.printf("%.2f", g);
}
public static void main(String[] args) {
double g = 1 / 3;
System.out.printf("%.2f", g);
}
যেহেতু 1 এবং 3 উভয়ই ফলাফলটি বৃত্তাকার নয় তবে এটি কেটে গেছে। সুতরাং আপনি ভগ্নাংশ উপেক্ষা এবং শুধুমাত্র পুরোপুরি গ্রহণ।
এটি এড়াতে আপনার 1 বা 3 সংখ্যার দশমিক ফর্ম হিসাবে 1.0 এবং / অথবা 3.0 হিসাবে অন্তত একটি থাকতে হবে।
এটি ব্যবহার করে দেখুন:
public static void main(String[] args) {
double a = 1.0;
double b = 3.0;
double g = a / b;
System.out.printf(""+ g);
}
"ডাবল জি = 1.0 / 3.0;" পরিবর্তে.
অন্যান্য অনেকেই আসল বিষয়টি উল্লেখ করতে ব্যর্থ হয়েছেন:
শুধুমাত্র পূর্ণসংখ্যার উপর একটি ক্রিয়াকলাপ একটি পূর্ণসংখ্যার সাথে অপারেশনের ফলাফলকে কাস্ট করে।
এর অগত্যা অর্থ হ'ল ভাসমান পয়েন্টের ফলাফলগুলি, এটি একটি পূর্ণসংখ্যা হিসাবে প্রদর্শিত হতে পারে, কেটে নেওয়া হবে (দশমিক অংশটি ছাড়িয়ে যাবে)।
আপনি জিজ্ঞাসা করছেন কাস্টিং (টাইপকাস্টিং / টাইপ রূপান্তর) কী?
এটি ভাষা বাস্তবায়নের ক্ষেত্রে পরিবর্তিত হয়, তবে উইকিপিডিয়ায় মোটামুটি ব্যাপক দৃষ্টিভঙ্গি রয়েছে এবং এটি জবরদস্তি সম্পর্কেও কথা বলে , যা আপনার প্রশ্নের উত্তর দেওয়ার ক্ষেত্রে তথ্যগুলির একটি মূল অংশ।
1/2
লক্ষ্যের ভাষা (জাভা) নয়, কোনও পূর্ণ সংখ্যার মতো ডেভিয়েশনটিতে জড়িত কোনও প্রকারের কাস্টিং বা প্রকার রূপান্তর নেই । আপনি কেবল একটি পূর্ণসংখ্যা বিভাগকে অনুরোধ করেন, যার ফলস্বরূপ পূর্ণসংখ্যার ফলাফল হবে। প্রকার কাস্টিং শুধুমাত্র থেকে আপ-রূপান্তর কারণ int
একটি থেকে double
নিয়োগ হয়েছিল।
0.5
। সহজভাবে, জাভাতে, 1/2
একটি পূর্ণসংখ্যা বিভাগ, যার ফলাফল শূন্য পূর্ণসংখ্যার হয়। আপনি একটি ডাবলকে একটি শূন্য নির্ধারণ করতে পারেন, এটি এখনও একটি শূন্য, 0.0
দ্বিগুণ হলেও ।
int i = .99999999
সংখ্যায় 0. সেট করে More