জাভাতে পূর্ণসংখ্যায় ডাবল রূপান্তর করা


114

জাভাতে, আমি একটি ডাবলকে পূর্ণসংখ্যায় রূপান্তর করতে চাই, আমি জানি আপনি এটি করেন কিনা:

double x = 1.5;
int y = (int)x;

আপনি y = 1 পাবেন। আপনি যদি এটি করেন:

int y = (int)Math.round(x);

আপনি সম্ভবত ২ পাবেন আমরা যে বৃত্তাকার সংখ্যাটি খুঁজছি তার চেয়ে বেশি (যেমন: উপস্থাপিত কোডে 2 এর পরিবর্তে 1)?

(এবং হ্যাঁ, আমি এর অর্থ এটিই বোঝাতে চাইছি: এক্স এর কোনও মূল্য আছে কি , যেখানে y এমন ফলাফল দেখায় যা এক্সের বৃত্তাকার উপস্থাপনের চেয়ে ছাঁটাইযুক্ত ফলাফল?)

যদি তাই হয়: কেটে যাওয়ার ঝুঁকি না চালিয়ে গোলকেন্দ্রে দ্বিগুণ করার আরও ভাল উপায় কি?


মূর্তিযুক্ত কিছু: ম্যাথ.াউন্ড (এক্স) একটি দীর্ঘ দেয়, ডাবল নয়। অতএব: ম্যাথ.াউন্ড () এর পক্ষে 3.9999998-এর মতো দেখতে কোনও সংখ্যা ফিরে পাওয়া অসম্ভব। অতএব, int (ম্যাথ.াউন্ড ()) কখনই কোনও কিছুর ছাঁটাই করার প্রয়োজন হবে না এবং সর্বদা কাজ করবে।


6
ম্যাথ.াউন্ড (ডাবল) ডাবল নয়, একটি দীর্ঘ দেয়।
qbert220

উত্তর:


95

এমন কি কোনও সম্ভাবনা আছে যে মাধ্যমে দ্বিগুণ তৈরি কাস্টিংয়ের Math.round()ফলে এখনও একটি সংক্ষিপ্ত ডাউন সংখ্যা হবে

না, round()সর্বদা আপনার দ্বিগুণকে সঠিক মানের দিকে নিয়ে যাবে এবং তারপরে এটি এমন এক longজায়গায় ফেলে দেওয়া হবে যা কোনও দশমিক স্থানকে ছাঁটাই করবে। তবে গোল করার পরে কোনও ভগ্নাংশের অংশ অবশিষ্ট থাকবে না।

এখানে থেকে দস্তাবেজগুলি এখানে রয়েছে Math.round(double):

আর্গুমেন্টের নিকটতম দীর্ঘ প্রদান করে। ফলাফলটি ১/২ যোগ করে ফলাফলের মেঝে নিয়ে এবং ফলাফলটি দীর্ঘ টাইপ করার জন্য একটি পূর্ণসংখ্যার সাথে বৃত্তাকার হয়। অন্য কথায়, ফলাফলটি প্রকাশের মানের সমান:

(long)Math.floor(a + 0.5d)

3
গুরুত্বপূর্ণ বিষয়টি হ'ল রাউন্ডিংটি বৃত্তাকার পদ্ধতিতে করা হয়। একটি দীর্ঘ মান প্রত্যাবর্তিত হয়, যা নিরাপদে কোনও ইনট্রে কাস্ট করা যেতে পারে (ধরে নিলে প্রত্যাবর্তিত মান সর্বদা ইনট রেঞ্জের মধ্যে থাকবে)।
qbert220

হ্যাঁ. এক / দীর্ঘ / অবধি সমস্যা প্রদান করতে পারবেন না। একথাও ঠিক যে! এটি
অনুধাবন করা উচিত

1
যদিও এটা সত্যি যে ছাঁটাই রাউন্ডইং কারণে সৃষ্টি হবে না, আপনি এখনও না প্রত্যাশিত ফলাফল কেবল ডবল থেকে কাস্ট করা যা একটি খুব বড় সংখ্যা কারণে পেতে পারেন [max double: 1.7976931348623157E308]int- এ যা অনেক অনেক ছোট [max int: 2147483647]। কিছু মনে রাখবেন।
Nelda.techspiress

22

ডেটাটাইপের Doubleজন্য int, আপনি নিম্নলিখিতগুলি ব্যবহার করতে পারেন:

Double double = 5.00;

int integer = double.intValue();

তিনি একটি বৃত্তাকার মান খুঁজছেন।
মার্কুইস

1
আমি মনে করি না যে এটি আপনি 4.99999999999 (যা 5 প্রদান করবেন না) হিসাবে
প্রত্যাশা করেন

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