উত্তর:
জাভা 8 এ আপডেট হয়েছে:
Math.toIntExact(value);
আসল উত্তর:
সাধারণ ধরণের ingালাই এটি করা উচিত:
long l = 100000;
int i = (int) l;
দ্রষ্টব্য, তবে, যে বৃহত সংখ্যা (সাধারণত এর চেয়ে বড় 2147483647এবং এর চেয়ে ছোট -2147483648) কিছু বিট হারাবে এবং ভুলভাবে উপস্থাপন করা হবে।
উদাহরণস্বরূপ, 2147483648হিসাবে প্রতিনিধিত্ব করা হবে -2147483648।
Long x = 100L;
int y = x.intValue();
intValue()এখানে ব্যাকগ্রাউন্ডে যা করে তা মান isালাই করছে?
longএখানে আদিম নয় । এটি উল্লেখযোগ্য টাইপ Longযা সরাসরি কোনও আদিমকে কাস্ট করতে পারে না int। int y = (int)x;একটি ফাঁসির int y = (int)(long)xকাজ ছুড়ে ফেলবে তবে কাজ করবে। (কারণ অটোবক্সিং)
ছোট মানগুলির জন্য, ingালাই যথেষ্ট:
long l = 42;
int i = (int) l;
তবে longএকটি চেয়ে আরও তথ্যের ধরে রাখতে পারেন int, তাই এটি পুরোপুরি থেকে রূপান্তর করা সম্ভব নয় longথেকে int, সাধারণ ক্ষেত্রে। যদি এর longচেয়ে কম বা সমান সংখ্যক হোল্ড থাকে তবে Integer.MAX_VALUEকোনও তথ্য না হারিয়ে losingালাই করে এটি রূপান্তর করতে পারে।
উদাহরণস্বরূপ, নিম্নলিখিত নমুনা কোড:
System.out.println( "largest long is " + Long.MAX_VALUE );
System.out.println( "largest int is " + Integer.MAX_VALUE );
long x = (long)Integer.MAX_VALUE;
x++;
System.out.println("long x=" + x);
int y = (int) x;
System.out.println("int y=" + y);
আমার মেশিনে নিম্নলিখিত আউটপুট উত্পাদন করে:
largest long is 9223372036854775807
largest int is 2147483647
long x=2147483648
int y=-2147483648
নেগেটিভ সাইনটি লক্ষ্য করুন y। কারণ xপূর্ণসংখ্যার চেয়ে বড় একটি মান int yধরেছে MA MAX_VALUE, এটি ধরে রাখতে অক্ষম। এই ক্ষেত্রে এটি নেতিবাচক সংখ্যার চারপাশে মোড়ানো pped
আপনি যদি এই মামলাটি নিজে পরিচালনা করতে চান তবে আপনি এর মতো কিছু করতে পারেন:
if ( x > (long)Integer.MAX_VALUE ) {
// x is too big to convert, throw an exception or something useful
}
else {
y = (int)x;
}
এই সব ধনাত্মক সংখ্যা ধরে। নেতিবাচক সংখ্যার জন্য, MIN_VALUE'MAX_VALUE' এর পরিবর্তে ব্যবহার করুন
জাভা 8 যেহেতু আপনি ব্যবহার করতে পারেন: Math.toIntExact (দীর্ঘ মূল্য)
জাভাডোক: ম্যাথ টু আইন্টেক্স্যাক্ট দেখুন
দীর্ঘ আর্গুমেন্টের মান প্রদান করে; যদি মানটি কোনও ইনট্রোভার হয় তবে একটি ব্যতিক্রম ছোঁড়া।
Math.toIntExactজেডিকে 8 এর উত্স কোড :
public static int toIntExact(long value) {
if ((int)value != value) {
throw new ArithmeticException("integer overflow");
}
return (int)value;
}
ব্যবহার যদি পেয়ারা গ্রন্থাগার , সেখানে পদ্ধতি Ints.checkedCast(long)এবং Ints.saturatedCast(long)রূপান্তরের জন্য longকরতে int।
long x = 3;
int y = (int) x;
কিন্তু এটি ধরে নিয়েছে যে longএকটি হিসাবে উপস্থাপিত হতে পারে int, আপনি কি উভয়ের মধ্যে পার্থক্য জানেন?
আপনি আদিম এবং কলের Longপরিবর্তে মোড়ক ব্যবহার করতে পারেনlong
Long.intValue()
এটি longমান অনুসারে গোল করে / কেটে দেয় int।
যদি সরাসরি ingালাই ত্রুটি দেখায় আপনি এটি এটি করতে পারেন:
Long id = 100;
int int_id = (int) (id % 100000);
জাভাতে, দীর্ঘ একটি স্বাক্ষরিত b৪ বিট নম্বর, যার অর্থ আপনি -9,223,372,036,854,775,808 এবং 9,223,372,036,854,775,807 (সহ) এর মধ্যে নম্বর সংরক্ষণ করতে পারেন।
অন্যদিকে, কোন আন্তঃলিঙ্কে 32 বিট সংখ্যায় স্বাক্ষরিত হয়, যার অর্থ আপনি -2,147,483,648 এবং 2,147,483,647 (অন্তর্ভুক্ত) এর মধ্যে নম্বর সংরক্ষণ করতে পারেন।
সুতরাং যদি আপনার দীর্ঘকাল কোনও পূর্বের জন্য অনুমোদিত মানের বাইরে থাকে তবে আপনি কোনও মূল্যবান রূপান্তর পাবেন না।
আদিম জাভা ধরণের আকার সম্পর্কে এখানে বিশদ:
http://download.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html
ইন জাভা 8 আমি নিম্নলিখিত ভাবে না
long l = 100L;
int i = Math.toIntExact(l);
মানটির পরিসীমা ছাড়িয়ে ArithmaticExceptionগেলে এই পদ্ধতিটি ছুড়ে ফেলে । সুতরাং আমি ডেটা ক্ষতি থেকে নিরাপদ।longint
আপনি যদি একটি নিরাপদ রূপান্তর করতে চান এবং জাভা 8 এর ব্যবহার লম্বা এক্সপ্রেশন সহ উপভোগ করতে চান তবে আপনি এটি ব্যবহার করতে পারেন:
val -> Optional.ofNullable(val).map(Long::intValue).orElse(null)
Function<Long,Integer> function =?
দীর্ঘ x = 3120L; // যেকোনো দীর্ঘ মান গ্রহণ করুন z = x.intValue (); // আপনি একই পদ্ধতিতে ডাবল ইনটকে রূপান্তর করতে পারেন
আপনি যদি সরাসরি গোপন প্রয়োজন হয়
longvalue.intvalue ();
Long l = 100;
int i = Math.round(l);
বসন্তে, একটি দীর্ঘ থেকে ইনটকে রূপান্তর করার জন্য একটি কঠোর উপায় রয়েছে
শুধু লনোগ ইন্টে রূপান্তর করতে পারে না, কোনও ধরণের শ্রেণি বিস্তৃত হয় তবে সংখ্যাটি সাধারণভাবে অন্যান্য সংখ্যা প্রকারে রূপান্তর করতে পারে, এখানে আমি আপনাকে দেখাব যে কীভাবে একটি দীর্ঘকে ইনট, অন্য ধরণের বিপরীতে রূপান্তর করতে হয়।
Long l = 1234567L;
int i = org.springframework.util.NumberUtils.convertNumberToTargetClass(l, Integer.class);
