আমি কীভাবে একটি ডাবলকে নিকটতম পূর্ণসংখ্যার মানে রূপান্তর করতে পারি?


147

আপনি কীভাবে একটি ডাবলকে সবচেয়ে কাছের ইনটে রূপান্তর করবেন?

উত্তর:


78

Math.round()সম্ভবত ব্যবহার করেMidpointRounding.AwayFromZero

উদাহরণ:

Math.Round(1.2) ==> 1
Math.Round(1.5) ==> 2
Math.Round(2.5) ==> 2
Math.Round(2.5, MidpointRounding.AwayFromZero) ==> 3

6
Convert.ToInt32()একই জিনিসটি করবে না , বা দশমিকের পরে এটি কেবল সবকিছু ছিনিয়ে নেবে?
মাফিন ম্যান

208
আসলে কোনও পূর্ণসংখ্যার উত্পাদন করে না, তবে একটি দ্বিগুণ।
গাটোপিচ

13
@ রনি - না, এটি ডিজাইনের মাধ্যমে। ডিফল্টরূপে, Math.Round হবে নিকটতম বৃত্তাকার মিডপয়েন্ট সংখ্যা (এক্স + + .5) এমনকি নম্বর। আপনি যদি অন্যরকম আচরণ চান তবে আপনাকে এটি একটি পতাকাের মাধ্যমে নির্দিষ্ট করতে হবে। msdn.microsoft.com/en-us/library/system.midPointrounding.aspx
নিক

6
আমি ভাল না! :)
রনি

5
ডাবল ইনট নয়।
এভেজেনি নাবোকভ

267
double d = 1.234;
int i = Convert.ToInt32(d);

উল্লেখ

হ্যান্ডেলগুলি যেমন গোল করে:

নিকটতম 32-বিট স্বাক্ষরিত পূর্ণসংখ্যার দিকে গোলাকার। যদি মান দুটি পুরো সংখ্যার মাঝামাঝি হয় তবে সমান সংখ্যাটি ফিরে আসে; অর্থাৎ, 4.5 কে 4 এ রূপান্তর করা হয় এবং 5.5 কে 6 এ রূপান্তর করা হয়।


7
Math.Roundএটি আরও ভাল যে এটি প্রয়োজনীয় হিসাবে একটি int প্রদান করে।
কিথ

10
@ Robert-koritnik। কেন এটি "অবৈধ" তা নিশ্চিত নয়। ওপি একটি পছন্দসই বৃত্তাকার নিয়ম নির্দিষ্ট করে নি এবং "রাউন্ড .5 থেকে নিকটতম এমনকি" ফেরার পথ থেকে মান নিয়ম। সর্বদা রাউন্ডিংয়ের অযাচিত পরিসংখ্যানগত প্রভাব রয়েছে has
কিথ

@ কিথ: আমি জানি না তবে আমাকে সর্বদা x.5 রেকর্ড করতে শিখানো হয়েছে তবে পরিসংখ্যানগুলির জন্য এটি নিচে বা নিচে নেওয়ার যুক্তিটি দেখতে পাচ্ছি। তার জন্য ধন্যবাদ. PS এটি পরিসংখ্যান, অর্থ বা অ্যাকাউন্টিংয়ে নেই যেখানে এই ধরণের গোলটি ডিফল্ট বলে মনে হয় তা পরিষ্কার
রবার্ট কোরিটনিক

3
"সর্বদা রাউন্ডিংয়ের অযাচিত পরিসংখ্যানগত প্রভাব রয়েছে" - এটি কেবল সাধারণ মিথ্যা। রাউন্ডিং .5 আপ ঠিক গোল করে অর্ধেক সংখ্যার - [0,.5)- নিচে এবং ঠিক অর্ধেক সংখ্যা - [.5,1)- উপরে up এমনকি সামান্য কিছুটা পক্ষপাতিত্ব এমনকি সংখ্যার সাথে গোলাকার, এটি (.5,1.5)1 তবে [1.5,2.5]2 এর মতো হয়
জিম বাল্টার

11
@ জিমবাল্টার যেমন শূন্য গোল না হয়, অর্ধেক গোল করে একটি ধনাত্মক পক্ষপাত প্রবর্তন করে, সুতরাং এটি অসমমিতিক বৃত্তাকার হিসাবে পরিচিত। "বিতরণ অর্ধ থেকে সম" এমনকি হয় না, যদি আপনার বিতরণটি যথেষ্ট পরিমাণে হয় এবং রাউন্ডিংটি এমনকি উভয় বা অসম সংখ্যাকে পক্ষপাতিত্ব করে না। দেখুন মধ্যপথে rounding টাই ভঙ্গ
এসডিডিএস

36

আপনি ফাংশন ব্যবহার করতে পারেন:

//Works with negative numbers now
static int MyRound(double d) {
  if (d < 0) {
    return (int)(d - 0.5);
  }
  return (int)(d + 0.5);
}

আর্কিটেকচারের উপর নির্ভর করে এটি কয়েকগুণ দ্রুত।


এটি ম্যাথ হিসাবে আমার পক্ষে উপযুক্ত ছিল ound রাউন্ড আমার ইচ্ছা মতো কাজ করছিল না।
হান্না

@ কুলুব হ্যাঁ এটা করে এটি ডাবল ডি রূপান্তর করে যা এর সাথে 0.5 টি সংযুক্ত করে পূর্ণসংখ্যায় পরিণত হয়।
ড্যারেল

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

3
নেতিবাচক সংখ্যার (মাইরাউন্ড (-1.2) = 0) এর বেআইনী আচরণের জন্য নীচে @ ইটার্নল 21 এর মন্তব্য দেখুন
ক্রিস

2
যে কারও অবাক হওয়ার জন্য, @ ক্রিস দ্বারা উল্লিখিত বিষয়টি এখন মানটি নেতিবাচক কিনা তা পরীক্ষা করে সম্ভবত সমাধান করা যেতে পারে।
জন ওয়েইজ 20'16

14
double d;
int rounded = (int)Math.Round(d);

5

আমি জানি এই প্রশ্নটি পুরানো, তবে আমি আমার অনুরূপ প্রশ্নের উত্তর খুঁজতে গিয়ে এটি খুঁজে পেয়েছি। আমি ভেবেছিলাম যে আমাকে দেওয়া হয়েছে খুব দরকারী টিপ শেয়ার করব।

ইনট এ রূপান্তর করার সময়, .5ডাউনকাস্টিংয়ের আগে কেবল নিজের মান যুক্ত করুন । হিসাবে downcasting intসবসময় কম সংখ্যা (যেমন ড্রপ (int)1.7 == 1), যদি আপনার নম্বর .5বা উচ্চতর যোগ .5এটি আপ আনতে হবে আগামী নম্বরে এবং আপনার হতাশ করার intসঠিক মান করা উচিত নয়। (যেমন (int)(1.8 + .5) == 2)


13
সমস্যাটি হ'ল যদি আপনি সেভাবে নেতিবাচক মানগুলি রূপান্তর করতে চেষ্টা করেন। উদাহরণস্বরূপ -1.25 সমান 0 এর সমাপ্ত হবে (-1.25 + 0.5 = 0.75, এবং একবার এটি 0 এর নিচে ফেলে দেওয়া হবে)। সুতরাং আপনাকে নেতিবাচক মানগুলি থেকে 0.5 বিয়োগ করতে হবে।
শাশ্বত 21

কেউ ব্যবহার করতে পারেন+ 0.5 * Math.Abs(d)
তাউ

0

অন্যান্য উত্তরের পদ্ধতিগুলি OverflowExceptionযদি ভাসমানের মান আন্ত সীমার বাইরে থাকে তবে তা ছোঁড়ে। https://docs.microsoft.com/en-us/dotnet/api/system.convert.toint32?view=netframework-4.8#System_Convert_ToInt32_System_Single_

int result = 0;
try {
    result = Convert.ToInt32(value);
}
catch (OverflowException) {
    if (value > 0) result = int.MaxValue;
    else result = int.Minvalue;
}

-1

Ityক্যের জন্য, ম্যাথফরাউন্ডটোইন্ট ব্যবহার করুন

using UnityEngine;

public class ExampleScript : MonoBehaviour
{
    void Start()
    {
        // Prints 10
        Debug.Log(Mathf.RoundToInt(10.0f));
        // Prints 10
        Debug.Log(Mathf.RoundToInt(10.2f));
        // Prints 11
        Debug.Log(Mathf.RoundToInt(10.7f));
        // Prints 10
        Debug.Log(Mathf.RoundToInt(10.5f));
        // Prints 12
        Debug.Log(Mathf.RoundToInt(11.5f));

        // Prints -10
        Debug.Log(Mathf.RoundToInt(-10.0f));
        // Prints -10
        Debug.Log(Mathf.RoundToInt(-10.2f));
        // Prints -11
        Debug.Log(Mathf.RoundToInt(-10.7f));
        // Prints -10
        Debug.Log(Mathf.RoundToInt(-10.5f));
        // Prints -12
        Debug.Log(Mathf.RoundToInt(-11.5f));
    }
}

উৎস

public static int RoundToInt(float f) { return (int)Math.Round(f); }

প্রশ্নটি ityক্যের উল্লেখ বা ট্যাগ করে না।
XenoRo

@ XenoRo আমি oldক্য ব্যবহার করার সময় যারা অনুরূপ উত্তরগুলির সন্ধান করে তাদের জন্য এই পুরানো প্রশ্নের উত্তর দিচ্ছিলাম।
zwcloud

2
জ্ঞান ভাগ করে নেওয়ার জন্য আপনি নিজের প্রশ্নের উত্তর দিতে পারেন। এ জাতীয় ক্ষেত্রে এপিআই-তে নির্দিষ্ট সুনির্দিষ্ট প্রশ্ন তৈরি করুন (এই ক্ষেত্রে ityক্য)। উত্তরগুলি প্রশ্নের উত্তরগুলি হওয়া উচিত। অন্যথায় এখানে প্রতিটি সি সিআইপি এর জন্য একটি গোলাকার ক্রিয়া সহ একটি উত্তর থাকতে পারে could
জেনোরো

-2

আমি একটি বৈজ্ঞানিক ক্যালকুলেটর বিকাশ করছি যা একটি ইন্টার বোতাম খেলা করে। আমি নিম্নলিখিতটি একটি সহজ, নির্ভরযোগ্য সমাধান খুঁজে পেয়েছি:

double dblInteger;
if( dblNumber < 0 )
   dblInteger = Math.Ceiling(dblNumber);
else
   dblInteger = Math.Floor(dblNumber);

ম্যাথ.রাউন্ড কখনও কখনও অপ্রত্যাশিত বা অনাকাঙ্ক্ষিত ফলাফল উত্পন্ন করে এবং পূর্ণসংখ্যার (castালাই বা রূপান্তর মাধ্যমে রূপান্তর ...) এর সুস্পষ্ট রূপান্তর প্রায়শই উচ্চ-নির্ভুলতার সংখ্যার জন্য ভুল মান তৈরি করে। উপরের পদ্ধতিটি সর্বদা কাজ করে বলে মনে হয়।


2
এটি কি সমস্ত নেতিবাচক এবং সমস্ত ধনাত্মক সংখ্যাকে গোল করে দেয়? এটি অগত্যা "নিকটবর্তী" পূর্ণসংখ্যা নয়।
টিম পোহলমান

এটি নিকটতম নম্বর নয়।
সমীর আমার

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