উত্তর:
এ Double
একটি নয় Integer
, সুতরাং castালাই কাজ করবে না। Double
ক্লাস এবং double
আদিম মধ্যে পার্থক্য নোট করুন । এছাড়াও নোট করুন যে একটি Double
একটি Number
, তাই এর পদ্ধতি রয়েছে intValue
যা আপনি আদিম হিসাবে মান পেতে ব্যবহার করতে পারেন int
।
intValue()
তখন ফোন করুন ।
intValue()
, এটা ঠিক কাস্ট double
একটি থেকে int
।
আপনার মেথডভ্যালু () এর মতো পদ্ধতিটি ব্যবহার করে স্পষ্টভাবে ইনট মান পেতে হবে:
Double d = 5.25;
Integer i = d.intValue(); // i becomes 5
অথবা
double d = 5.25;
int i = (int) d;
2^31 - 1 (Integer.MAX_VALUE)
উপচে পড়বে।
1.6 -> 1
, 1.4 -> 1
, -1.6 -> -1
, -1.4 -> -1
,
আমি মনে করি ভুল উত্তরগুলি covering াকাই এবং এর পিছনে যুক্তি না দিয়ে অন্যান্য উত্তরগুলি বোঝা অসম্ভব ।
আপনি সরাসরি Integer
কোনও Double
বস্তুতে কাস্ট করতে পারবেন না । এছাড়াও Double
এবং Integer
অপরিবর্তনীয় বস্তু, তাই আপনি এগুলি কোনওভাবেই সংশোধন করতে পারবেন না।
প্রতিটি সাংখ্যিক শ্রেণীর একটি প্রাথমিক বিকল্প রয়েছে ( Double
বনাম double
, Integer
বনাম int
, ...)। নোট করুন যে এই আদিমগুলি একটি ছোট হাতের অক্ষর দিয়ে শুরু হয় (যেমন int
)। এটি আমাদের জানায় যে তারা শ্রেণি / অবজেক্ট নয়। যার অর্থ এইও যে তাদের কোনও পদ্ধতি নেই। বিপরীতে, ক্লাস (উদাঃ Integer
) এই আদিমগুলির চারপাশে বাক্স / মোড়কের মতো কাজ করে, যা তাদেরকে বস্তুর মতো ব্যবহার করা সম্ভব করে।
একটিতে রূপান্তর Double
করতে Integer
আপনাকে এই কৌশলটি অনুসরণ করতে হবে:
Double
বস্তুকে আদিম রূপান্তর করুন double
। (= "আনবক্সিং")double
একটি আদিম থেকে int
। (= "ingালাই")int
কোনও Integer
বস্তুর কাছে ফিরিয়ে আনুন । (= "বক্সিং")// starting point
Double myDouble = Double.valueOf(10.0);
// step 1: unboxing
double dbl = myDouble.doubleValue();
// step 2: casting
int intgr = (int) dbl;
// step 3: boxing
Integer val = Integer.valueOf(intgr);
আসলে একটি শর্টকাট আছে। আপনি Double
সরাসরি কোনও আদিম থেকে আনবক্স করতে পারবেন int
। এইভাবে, আপনি সম্পূর্ণ পদক্ষেপ 2 এড়িয়ে যেতে পারেন।
Double myDouble = Double.valueOf(10.0);
Integer val = Integer.valueOf(myDouble.intValue()); // the simple way
তবে উপরে অনেকগুলি বিষয় রয়েছে যা উপরের কোডের আওতায় নেই। উপরের কোডটি নাল-নিরাপদ নয়।
Double myDouble = null;
Integer val = Integer.valueOf(myDouble.intValue()); // will throw a NullPointerException
// a null-safe solution:
Integer val = (myDouble == null)? null : Integer.valueOf(myDouble.intValue());
এখন এটি বেশিরভাগ মানের জন্য কাজ করে। তবে পূর্ণসংখ্যার একটি খুব ছোট পরিসর (কমপক্ষে / MAX মান) একটি তুলনায় আছে Double
। তার উপরে, ডাবলগুলি "বিশেষ মানগুলি" ধরে রাখতে পারে, এটি পূর্ণসংখ্যাগুলি পারে না:
সুতরাং, প্রয়োগের উপর নির্ভর করে, আপনি বাজে ব্যতিক্রমগুলি এড়াতে কিছু ফিল্টারিং যুক্ত করতে চাইতে পারেন।
তারপরে, পরবর্তী ত্রুটিটি গোলটি কৌশল ing ডিফল্ট হিসাবে জাভা সর্বদা ডাউন হবে। বৃত্তাকার ডাউন সমস্ত প্রোগ্রামিং ভাষায় নিখুঁত ধারণা তৈরি করে। মূলত জাভা কিছু বাইট ফেলে দিচ্ছে। আর্থিক অ্যাপ্লিকেশনগুলিতে আপনি অবশ্যই হাফ-আপ রাউন্ডিং ব্যবহার করতে চান (যেমন: round(0.5) = 1
এবং round(0.4) = 0
)।
// null-safe and with better rounding
long rounded = (myDouble == null)? 0L: Math.round(myDouble.doubleValue());
Integer val = Integer.valueOf(rounded);
আপনি এতে অটো- (আন) বক্সিং ব্যবহার করার জন্য প্রলুব্ধ হতে পারেন , তবে আমি তা করব না। আপনি যদি ইতিমধ্যে এখন আটকে থাকেন, তবে পরবর্তী উদাহরণগুলিও তা স্পষ্ট নয়। আপনি যদি অটো- (আন) বক্সিংয়ের অভ্যন্তরীণ কাজগুলি বুঝতে না পারেন তবে দয়া করে এটি ব্যবহার করবেন না।
Integer val1 = 10; // works
Integer val2 = 10.0; // doesn't work
Double val3 = 10; // doesn't work
Double val4 = 10.0; // works
Double val5 = null;
double val6 = val5; // doesn't work (throws a NullPointerException)
আমি অনুমান করি যে নিম্নলিখিতগুলি একটি আশ্চর্য হওয়া উচিত নয়। তবে যদি এটি হয় তবে আপনি জাভাতে কাস্টিং সম্পর্কে কিছু নিবন্ধ পড়তে চাইতে পারেন।
double val7 = (double) 10; // works
Double val8 = (Double) Integer.valueOf(10); // doesn't work
Integer val9 = (Integer) 9; // pure nonsense
এছাড়াও, new Integer()
কনস্ট্রাক্টর ব্যবহার করার প্রলোভন করবেন না (যেমন কিছু অন্যান্য উত্তর প্রস্তাব দেয়)। valueOf()
কারণ তারা ক্যাশে ব্যবহার পদ্ধতি ভাল হয়। এই পদ্ধতিগুলি ব্যবহার করা ভাল অভ্যাস, কারণ সময়ে সময়ে তারা আপনাকে কিছু স্মৃতি সাশ্রয় করবে।
long rounded = (myDouble == null)? 0L: Math.round(myDouble.doubleValue());
Integer val = new Integer(rounded); // waste of memory
আমি তিনটি সম্ভাবনা দেখতে পাচ্ছি। প্রথম দুটি অঙ্কগুলি কেটে ফেলেছে, শেষেরটি একটি নিকটতম পূর্ণসংখ্যার রাউন্ডে।
double d = 9.5;
int i = (int)d;
//i = 9
Double D = 9.5;
int i = Integer.valueOf(D.intValue());
//i = 9
double d = 9.5;
Long L = Math.round(d);
int i = Integer.valueOf(L.intValue());
//i = 10
এটার মত:
Double foo = 123.456;
Integer bar = foo.intValue();
নিশ্চয় সহজ উপায় ব্যবহার করা intValue()
। তবে এটি কেবল পূর্ণসংখ্যার অংশটি দেয়; এটি কোনও রাউন্ডিং করে না। আপনি যদি দ্বিগুণ মানের নিকটতম পূর্ণসংখ্যা চান তবে আপনার এটি করতে হবে:
Integer integer = Integer.valueOf((int) Math.round(myDouble)));
এবং নাল কেস ভুলবেন না:
Integer integer = myDouble == null ? null : Integer.valueOf((int) Math.round(myDouble)));
Math.round()
তুলনামূলক কৃপায় অসীম হাঁসের কেস যেমন অনন্ত এবং NaN পরিচালনা করে।
double a = 13.34;
int b = (int) a;
System.out.println(b); //prints 13
কেবল এইভাবে এটি করুন ...
Double d = 13.5578;
int i = d.intValue();
System.out.println(i);
Double d = 100.00;
Integer i = d.intValue();
এটির সাথে এটি যুক্ত করা উচিত যে এটি অটোবক্সিংয়ের সাথে কাজ করে।
অন্যথায়, আপনি একটি int (প্রাথমিক) পাবেন এবং তারপরে সেখান থেকে একটি পূর্ণসংখ্যা পেতে পারেন:
Integer i = new Integer(d.intValue());
new Integer(int)
পরিবর্তে ব্যবহার করবেন না , এর মধ্যে Integer.valueOf(int)
ছোট ছোট পূর্ণসংখ্যার জন্য ক্যাশে রয়েছে যেমন।
আপনি "সংকীর্ণ বা সুস্পষ্ট ধরণের রূপান্তর" ব্যবহার করে এটি করতে পারেন, ডাবল লম্বা → ইন্ট। আমি এটি কাজ করবে আশা করি।
double d = 100.04;
long l = (long)d; // Explicit type casting required
int i = (int)l; // Explicit type casting required
PS: এটি ডাবল হিসাবে সমস্ত দশমিক মান আছে এবং বাম দিকে কিছুই দেবে না। 0.58 এর ক্ষেত্রে এটি এটিকে নীচে 0 এ সংকুচিত করবে তবে অন্যদের জন্য এটি যাদু করবে।
আর একবার চেষ্টা কর
double doubleValue = 6.5;Double doubleObj = new Double(doubleValue);int intResult = doubleObj.intValue();
স্মৃতিশক্তি দক্ষ, কারণ এটি ইতিমধ্যে তৈরি করা দ্বিগুণ ইভেন্টটি ভাগ করবে।
Double.valueOf(Math.floor(54644546464/60*60*24*365)).intValue()
Math.floor(...)
? intValue()
সর্বদা যাই হোক না কেন মেঝে।
এটা আমার জন্য কাজ। এটা চেষ্টা কর:
double od = Double.parseDouble("1.15");
int oi = (int) od;