এটিকে (জাভা) রুপান্তর করতে ডাবলকে গোল করা


119

এই মুহূর্তে আমি এটি চেষ্টা করছি:

int a = round(n);

যেখানে nএকটি doubleকিন্তু এটি কাজ করছে না। আমি কি ভুল করছি?



6
আপনার আরও প্রকৃতপক্ষে "কাজ করছে না" এর বিস্তারিত বর্ণনা করা উচিত। কি ঘটেছে? কি হয় না? তুমি কি আশা কর? আপনি কি ত্রুটি পেয়েছি? আপনার কি round()একই ক্লাসে কোনও পদ্ধতি আছে? তুমি কি করেছ import static java.lang.Math.*? ইত্যাদি .. সংখ্যার গোল করার অনেকগুলি উপায় রয়েছে এবং এইভাবে সম্ভাব্য উত্তরও প্রচুর। অন্য কথায়, আপনার প্রশ্নটি অস্পষ্ট এবং অস্পষ্ট এবং এর বর্তমান আকারে যুক্তিসঙ্গতভাবে উত্তর দেওয়া যায় না। এটি অন্ধকারে শুটিং করছে।
BalusC

1
"কাজ না করা" এর অর্থ কি নিকটতম ইনটকে গোল করা, বা ব্যতিক্রম নিক্ষেপ করা, বা উপরে / নিচে গোল না করা? উত্তরের সাথে প্রসঙ্গে রেফারেন্স ছাড়াই এই প্রশ্নটি অকেজো use
Modulitos

উত্তর:


239

round()স্নিপেটে পদ্ধতির রিটার্ন টাইপ কী ?

যদি এই Math.round()পদ্ধতিটি হয় তবে ইনপুট প্যারামটি দ্বিগুণ হলে এটি একটি দীর্ঘ ফিরিয়ে দেয়।

সুতরাং, আপনাকে রিটার্ন মান দিতে হবে:

int a = (int) Math.round(doubleVar);

1
ম্যাথ.টোইন্টেক্স্যাক্ট (দীর্ঘ) ব্যবহারের পরিবর্তে কেবল কোন ইন্ট্রে কাস্টিংয়ের পরিবর্তে বিবেচনা করুন; একটি ডাবল মানের একটি বিস্তৃত পরিমাণ ধারণ করতে পারে এবং আপনার ডাবলটি আপনি প্রত্যাশার চেয়ে বড় হলে আপনি সম্ভবত নিঃশব্দে সর্বাধিক উল্লেখযোগ্য বিট ছুঁড়ে দিতে চান না।
অষ্টম

আমি বিশ্বাস করি theালাই প্রয়োজনীয় নয়। এটি অতীতে ছিল কিনা তা আমি জানি না তবে রাউন্ডটি ফিরে আসে।
ড্রপআউট

@ ড্রপআউট ম্যাথ.গ্রাউন্ডটি যদি আপনি এটি একটি ভাসা দেন এবং একটি ডাবল দিলে একটি লম্বা দেয় returns
তুর

27

আপনি যদি ম্যাথ.াউন্ড () পছন্দ না করেন তবে আপনি এই সাধারণ পদ্ধতিরও ব্যবহার করতে পারেন:

int a = (int) (doubleVar + 0.5);

4
সেখানে পরিষ্কারভাবে পচ্ছন্দ না কোন মূল্যবান কারণ নেই Math.round(): stackoverflow.com/a/6468757/1715716
Gauthier আপনি Boaglio

3
এই সমাধানটি সংক্ষিপ্ত, কোনও আমদানির প্রয়োজন নেই এবং ন্যূনতম পরিবর্তন সহ অনেকগুলি প্রোগ্রামিং ভাষায় পোর্টেবল। : এবং এটা আরও দ্রুত আপনার প্ল্যাটফর্মে উপর নির্ভর করে হতে পারে stackoverflow.com/questions/12091014/...
ডাঃ ড্যানিয়েল Thommes

1
আমি আপনার উত্তরের সমালোচনা করছি না, যা আপনার উল্লেখ করার কারণে আমি খুব দরকারী বলে মনে করি। আমি এই মন্তব্যে, এমন লোকদের সম্বোধন করছিলাম যারা ব্যবহার করতে ভয় পাবে Math.round(), যা "আক্ষরিক" আপনি যে সমাধানটি সরবরাহ করেন ঠিক তেমনই করে that চিয়ার্স।
গৌথির বোয়াগলিও

2
হ্যাঁ, নেহজের মতো বলেছিলেন, আমি বিশ্বাস করি এটি উদাহরণস্বরূপ -২.১ থেকে -১ এর মধ্যে হবে।
বেন অ্যারনসন 15

5
অ্যালবার্তো হরমাজাবল, আপনি কি লক্ষ্য করেন নি যে তিনি যুক্ত করেছেন 0.5?
শাশা

11

"নিকটতম" পূর্ণসংখ্যার মতো দ্বিগুণ গোলাকার :

1.4 -> 1

1.6 -> 2

-2.1 -> -2

-1.3 -> -1

-1.5 -> -2

private int round(double d){
    double dAbs = Math.abs(d);
    int i = (int) dAbs;
    double result = dAbs - (double) i;
    if(result<0.5){
        return d<0 ? -i : i;            
    }else{
        return d<0 ? -(i+1) : i+1;          
    }
}

আপনি পছন্দ হিসাবে শর্ত (ফলাফল <0.5) পরিবর্তন করতে পারেন ।


আমি এনিভ্যালারের উত্তরটির সাথে একমত তবে আপনাকে যদি সর্বোচ্চ সংখ্যার সংখ্যার দিকে যেতে হয় তবে আপনি নীচে পছন্দ করতে পারেন: ডাবল ডেসিমাল সংখ্যা = 4.56777; System.out.println (নতুন ফ্লোট (ম্যাথ.াউন্ড (দশমিক সংখ্যা))); আউটপুট: 5
11

3
import java.math.*;
public class TestRound11 {
  public static void main(String args[]){
    double d = 3.1537;
    BigDecimal bd = new BigDecimal(d);
    bd = bd.setScale(2,BigDecimal.ROUND_HALF_UP);
    // output is 3.15
    System.out.println(d + " : " + round(d, 2));
    // output is 3.154
    System.out.println(d + " : " + round(d, 3));
  }

  public static double round(double d, int decimalPlace){
    // see the Javadoc about why we use a String in the constructor
    // http://java.sun.com/j2se/1.5.0/docs/api/java/math/BigDecimal.html#BigDecimal(double)
    BigDecimal bd = new BigDecimal(Double.toString(d));
    bd = bd.setScale(decimalPlace,BigDecimal.ROUND_HALF_UP);
    return bd.doubleValue();
  }
}

3

ম্যাথ.গ্রাউন্ড ফাংশনটি ওভারলোড হয়ে যায় যখন এটি কোনও ভাসমান মান পায়, এটি আপনাকে একটি ইনট দেবে। উদাহরণস্বরূপ এটি কাজ করবে।

int a=Math.round(1.7f);

যখন এটি একটি দ্বিগুণ মান পায়, এটি আপনাকে দীর্ঘ দেবে, সুতরাং আপনাকে এটি টাইপস্টাস্ট করতে হবে।

int a=(int)Math.round(1.7);

নির্ভুলতা ক্ষতি রোধ করার জন্য এটি করা হয়। আপনার দ্বিগুণ মান bit৪ বিট, তবে তারপরে আপনার ইনট ভেরিয়েবলটি কেবলমাত্র 32 বিবিট সংরক্ষণ করতে পারে তাই এটি কেবল এটি দীর্ঘকে রূপান্তরিত করে, যা 64 বিট তবে উপরে বর্ণিত হিসাবে আপনি এটি 32 বিট টাইপ করতে পারবেন।


1

এর ডকুমেন্টেশন Math.round:

একটি পূর্ণসংখ্যার মধ্যে আর্গুমেন্টের বৃত্তাকার ফলাফল প্রদান করে । ফলাফল সমান (int) Math.floor(f+0.5)

কাস্ট করার দরকার নেই int। অতীত থেকে সম্ভবত এটি পরিবর্তন করা হয়েছিল।


4
এখানে 2 ম্যাথ.গ্রাউন্ড পদ্ধতি রয়েছে। যেটি ভাসিয়ে নেয় একটি পূর্ণসংখ্যা ফেরত দেয়, এটি সঠিক। তবে যেটি ডাবল লাগে সে দীর্ঘ সময় দেয়।
ডোমিনিক এহরেনবার্গ


-1

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


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