জাভা দিয়ে কীভাবে ভাসমান রূপান্তর করবেন to


342

আমি ফ্লোটকে ইনট-এ রূপান্তর করতে নীচের লাইনটি ব্যবহার করেছি, তবে এটি আমার পছন্দ মতো সঠিক নয়:

 float a=8.61f;
 int b;

 b=(int)a;

ফলাফল হলো : 8 (এটি হওয়া উচিত 9)

কখন a = -7.65f, ফলাফল:-7 (এটি হওয়া উচিত -8)

এটি করার সর্বোত্তম উপায় কী?


16
আমার উল্লেখ করা উচিত যে কেবল টাইপকাস্টিং মানটি কেটে দেয় এবং মানটিতে কোনও বৃত্তাকার / মেঝে অপারেশন করে না।
ব্রায়ান গ্রাহাম

উত্তর:


678

ব্যবহারের Math.round()ফলে ভাসমানটি নিকটতম পূর্ণসংখ্যায় যাবে।


1
ম্যাথ.াউন্ড () এর পরে কেন টাইপকাস্টের প্রয়োজন?
নেক্রোমেন্সার

81
Math.round()রিটার্ন intমানটি তাই টাইপকাস্টিং ব্যবহার করে (int)নিরর্থক।
সলভেক

5
/ অথবা ... ব্যবহার (int)fooসহজতর।
yuttadhammo

31
সলভকের উত্তরটি সঠিক, তবে আমি এটি উল্লেখ করতে চাই যে ম্যাথ.গ্রাউন্ডে (ইনপুট) ভিত্তিতে দুটি পৃথক আউটপুট প্রকার থাকতে পারে। ম্যাথ.াউন্ড (ডাবল ক) একটি দীর্ঘ প্রত্যাবর্তন করে। ম্যাথ.উইন্ড (ফ্লোট এ) একটি ইনট প্রদান করে। docs.oracle.com/javase/7/docs/api/java/lang/…
Hososugi

2
ম্যাথ.গ্রাউন্ড () হ'ল ধীরে ধীরে অপারেশন (
কন্ট্রাক্ট

186

আসলে, আপনি যে ফলাফলটি অর্জন করতে চান তার উপর নির্ভর করে ফ্লোটকে ডাউন কাস্ট করার বিভিন্ন উপায় রয়েছে: (ইনট জন্য i, ফ্লোট f)

  • গোল (প্রদত্ত ভাসমানের নিকটতম পূর্ণসংখ্যা)

    i = Math.round(f);
      f =  2.0 -> i =  2 ; f =  2.22 -> i =  2 ; f =  2.68 -> i =  3
      f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -3

    দ্রষ্টব্য: এটি চুক্তি দ্বারা সমান (int) Math.floor(f + 0.5f)

  • কাটা (অর্থাত্ দশমিক বিন্দুর পরে সবকিছু ফেলে দিন)

    i = (int) f;
      f =  2.0 -> i =  2 ; f =  2.22 -> i =  2 ; f =  2.68 -> i =  2
      f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -2
  • সিল / ফ্লোর (কোনও পূর্ণসংখ্যার প্রদত্ত মানের চেয়ে সর্বদা বড় / ছোট যদি এর কোনও ভগ্নাংশ থাকে)

    i = (int) Math.ceil(f);
      f =  2.0 -> i =  2 ; f =  2.22 -> i =  3 ; f =  2.68 -> i =  3
      f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -2
    
    i = (int) Math.floor(f);
      f =  2.0 -> i =  2 ; f =  2.22 -> i =  2 ; f =  2.68 -> i =  2
      f = -2.0 -> i = -2 ; f = -2.22 -> i = -3 ; f = -2.68 -> i = -3

ধনাত্মক মানগুলিকে গোল করার জন্য , আপনি কেবল ব্যবহার করতে পারেন (int)(f + 0.5), যা Math.Roundসেই ক্ষেত্রে (ডক হিসাবে) ঠিক যেমন কাজ করে ।

আপনি নিকটতম এমনকি পূর্ণসংখ্যারMath.rint(f) জন্য রাউন্ডিং করতেও ব্যবহার করতে পারেন ; এটি যুক্তিযুক্তভাবে কার্যকর যদি আপনি ভগ্নাংশের অংশের সাথে প্রচুর পরিমাণে ভাসমান অংশটি .5 এর সমানভাবে সমান (সম্ভাব্য আইইইই রাউন্ডিং ইস্যুগুলি নোট করুন) এবং সেটটির গড় স্থিতি রাখতে চান বলে মনে করেন; আপনি আরেকটি পক্ষপাতিত্ব চালু করবেন, যেখানে এমনকি সংখ্যাগুলি বিজোড়ের চেয়ে বেশি সাধারণ হবে।

দেখা

http://mindprod.com/jgloss/round.html

http://docs.oracle.com/javase/6/docs/api/java/lang/Math.html

আরও তথ্য এবং কিছু উদাহরণের জন্য।


ছাদটি ব্যাংকারের বৃত্তাকার; এটি ত্রুটিগুলি হ্রাস করতে সহায়তা করে যা প্রদর্শিত হতে পারে যদি আপনি ধারাবাহিকভাবে 0.5 বা উপরে নিচে গোল করেন।
পেশাদাররা

@ প্রসফিলিজ আমি শব্দের পরিবর্তন করেছি এবং উত্তরের সেই অংশে একটি উইকির লিঙ্ক যুক্ত করেছি।


6

ম্যাথ.উইন্ডও একটি পূর্ণসংখ্যার মান দেয়, তাই আপনাকে টাইপকাস্ট করার দরকার নেই।

int b = Math.round(float a);

14
অন্যান্য উত্তর ইতিমধ্যে এটি বলে। আপনার যখন যুক্ত করার নতুন কিছু থাকে তবে দয়া করে একটি নতুন উত্তর যুক্ত করুন। (এছাড়াও, ম্যাথ.গ্রাউন্ডটি পূর্বে ফিরে আসে না))
জেফ্রে বোসবুম

1
তিনি টাইপকাস্টের দরকার নেই (সার্থি জবাব) সম্পর্কে ব্যাখ্যা দিয়েছেন। তবে এটি মন্তব্য হিসাবে রূপান্তরিত হতে পারে।
রঞ্জিত কুমার

5

Math.round(value)টাইপ করার পরে এটি পূর্ণসংখ্যার জন্য ব্যবহার করুন ।

float a = 8.61f;
int b = (int)Math.round(a);

ম্যাথ.উইন্ড (ভাসা) কোনও পূর্ববর্তী ফিরিয়ে দেয়, আমি নিশ্চিত নই কেন কাস্ট কাস্ট করতে হবে
নেফিলিম

-1

আমার হিসাবে, সহজ: (int) (a +.5) // a একটি ভাসা। বৃত্তাকার মান ফেরত দিন।

জাভা ম্যাথ.গ্রাউন্ড () প্রকারের উপর নির্ভরশীল নয়


4
কোড বিশ্লেষণ করে এমন অনেক বিকাশকারীকে এটি বিভ্রান্ত করবে। এটি গোল হয়ে গেছে তা পরিষ্কার হবে না।
ivan.panasiuk

1
অবশ্যই এটি, এটি কেবলমাত্র মৌলিক গণিত, চেষ্টা করুন
ব্রুনো এল

4
"বেসিক গণিত" একটি আপেক্ষিক শব্দ। :) আমার অভিজ্ঞতা অনুসারে, আমি বাজি ধরতে পারি যে 50% এর বেশি বিকাশকারী বুঝতে পারবেন না যে এটি সত্যই গোলাকার। এটি গাণিতিকভাবে সঠিক, তবে আমি যেমন লিখেছি তা পরিষ্কার নয় এবং কোডটি কী করে তা অন্যদের পক্ষে বোঝা শক্ত।
ivan.panasiuk

2
-(int) ( PI / 3 ): আপনার কোডটিকে একটি নেতিবাচক দিয়ে চেষ্টা করুন a... কখন -0.5থেকে 0?

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