বিগডিসিমাল শূন্যের চেয়ে বড় হলে তুলনা করুন


245

BigDecimalমান শূন্যের চেয়ে বেশি হলে আমি কীভাবে তুলনা করব ?


1
github.com/mortezaadi/bigdecimal-utils এ দেখুন একটি পদ্ধতি রয়েছে পজিটিভ () এর মতো রয়েছে (বিগডিসিমাল) .আইজিরো (); (bigdecimal) .notZero () হয়; (bigdecimal) .isPositive () হয়; // শূন্যের চেয়ে বড় (বিগডিসিমাল) .আইসনেজিটিভ (); // শূন্যের চেয়ে কম (বিগডিসিমাল) .isNonPositive (); // এর চেয়ে কম বা সমান শূন্য (বিগডিসিমাল) .আইনননেজিটিভ ();
মরতেজা আদি

@MortezaAdi যেহেতু BigDecimalকার্যকরী Comparableতুলনা ফাংশন মত lt, le, eq, neভাল একটি সরানো যাবে ComparableUtils। সুতরাং এগুলি অন্য কোনও শ্রেণীর মতো Dateবা কাস্টম ধরণের জন্য ব্যবহার করা যেতে পারে ।
ডিজেএমজে

@ ডিজেএমজে প্রয়োজনীয়তা বাস্তবায়নকে সংজ্ঞায়িত করে, তুলনামূলক ব্যবহারের কোনও প্রয়োজন বা উদ্দেশ্য ছিল না। লে, ল, এক, ইত্যাদি কার্যকারিতা ছাড়াও জেনেরিকের চেয়ে সম্পূর্ণ আলাদা।
মরতেজা আদি

উত্তর:


401

এটি এতটা সহজ:

if (value.compareTo(BigDecimal.ZERO) > 0)

ডকুমেন্টেশনcompareTo আসলে নির্দিষ্ট করে এটি ফিরে আসবে -1, 0 বা 1, কিন্তু আরো সাধারণ Comparable<T>.compareTo, পদ্ধতিটি কেবল গ্যারান্টী বা নিশ্চয়তা দিচ্ছে শূন্য কম শূন্য, অথবা যথাযথ তিনটি ক্ষেত্রে জন্য শূন্য চেয়ে বড় - তাই আমি সাধারণত যে তুলনা বিদ্ধ।


50
সতর্কতার অতিরিক্ত শব্দটির জন্য বলা হয়। ধরা যাক এর valueমান শূন্য তবে একটি শূন্য নন স্কেল (যেমন এটি এর 0.00পরিবর্তে মূল্যায়ন করে 0)) আপনি সম্ভবত এটি শূন্য সমান বিবেচনা করতে চান। compareTo()পদ্ধতি প্রকৃতপক্ষে এই চেষ্টা করতে হবে। তবে equals()পদ্ধতিটি হবে না। (আরেকটি প্রমাণের দরকার হলে, লোকী বা তার কোনও অবতার জীবিত এবং ভাল এবং সফ্টওয়্যার বিকাশে চলে গেছে moved)
অ্যান্ড্রু স্পেন্সার

9
যদিও আমি সম্মত হলাম যে এটি জাভার আইডেম্যাটিক সমাধান, তবে আমি মনে করি এটি আসলে পাঠযোগ্য। যতবারই আমি এই জাতীয় অভিব্যক্তির মুখোমুখি হই, তখন নিজেকে আশ্বস্ত করার জন্য নিজেকে একটি পরীক্ষা লিখতে দেখি যে আমি এটিকে সঠিকভাবে পেয়েছি। সম্ভবত সত্য যে সাম্প্রতিক ক্লাস যুক্ত করা যেমন LocalDateঅন্তর্ভুক্ত isBeforeএকটি ইঙ্গিত যা ওরাকল একইভাবে অনুভব করে। এটি আদর্শ নয়, তবে আমি মনে করি কোনও ইউটিলিটি isGreaterThanপদ্ধতি লিখতে এই পরিস্থিতিতে সামান্যতর পাঠযোগ্য ।
মার্ক স্লেটার

@ জোন স্কিটির সমাধান কি কাজ করে যদি মান 0.00 বা 0.0 হয়
অ্যাঞ্জেলিনা

1
@ অ্যাঞ্জেলিনা: আমি অবশ্যই এটি প্রত্যাশা করবো - অবশ্যই এই মানগুলি 0 এর চেয়ে বেশি নয় , তাই আমি compareToফিরে আসার প্রত্যাশা করি 0 তবে আপনি যদি চিন্তিত হন তবে আপনার পরীক্ষা করা সহজ হওয়া উচিত।
জন স্কে 13

@ মার্কস্ল্যাটার আমি সম্মত, তুলনাটি কেবল জাভাটির পাঠযোগ্যতার উন্নতিতে আরও বেশি সময় ব্যয় করা উচিত এবং যদি প্রতিটি প্রকল্পে প্রত্যেককে তার নিজস্ব পাঠযোগ্য পদ্ধতি তৈরি করতে হয় তবে তা বোধগম্য নয়। সি # তে আপনি বিদ্যমান বর্গের জন্য বর্ধিতকরণের পদ্ধতিও তৈরি করতে পারেন যাতে আপনি সরাসরি `value.isGreaterThen (foo)
use use

165

12
বিগডিসিমাল ডটকম পেয়ারটো () সাইনামকে একটি অপ্টিমাইজেশন হিসাবে তুলনা করে শুরু করে। সুতরাং এটি তুলনামূলকভাবে () কল করা ভাল, কারণ এটি আরও উদ্দেশ্যপ্রণোদিত এবং এটি কেবলমাত্র একটি অতিরিক্ত পদ্ধতি কলের দাম (যা আমি সন্দেহ করি যে যাইহোক অন্তর্ভুক্ত হবে) costs
অ্যান্ড্রু স্পেন্সার

27
এটি সর্বজনীন API এর অংশ part সুতরাং এটি আমার কাছে আরও ভাল উপায়। লক্ষণটি ইতিবাচক (যেমন> শূন্য) ইতিবাচক কিনা তা নির্ধারণ করার জন্য
মার্ক 13

আপনি কি মনে করেন যে এটির উচ্চতর পারফরম্যান্স যদি এটি Stringপ্রাথমিকভাবে প্রথম শ্রেণীর অক্ষরটি ধরে ফেলে BigDecimalতবে এটি কিনা তা দেখার জন্য -? এটি কীভাবে কাজ করতে পারে তার আমার সেরা অনুমান। আসলে সংখ্যাটি কিনা তা নির্ধারণ করতে দ্রুত বলে মনে হচ্ছে 0। এটা কি সঠিক? আন্তন বেসনোভকে আগাম অনেক অনেক ধন্যবাদ!

5
আপনি যদি পচা BigDecimal.compareTo()পদ্ধতিটি দেখুন, আপনি দেখতে পাবেন যে এটি signum()দুটিবার কল করেছে । পারফরম্যান্স যতদূর যায় ততই signum()ভাল।
মেআইআর

1
দশমিক ক্ষেত্রে আপনার সমস্যা কি ছিল? @ জেফাজুনিয়ার
ইয়াভুজ

11

compareTo()ক্লাসে অন্তর্নির্মিত ফাংশনটি ব্যবহার করুন ।


1

পদ্ধতিটি ব্যবহার করা নিরাপদ compareTo()

    BigDecimal a = new BigDecimal(10);
    BigDecimal b = BigDecimal.ZERO;

    System.out.println(" result ==> " + a.compareTo(b));

কনসোল প্রিন্ট

    result ==> 1

compareTo() আয়

  • 1 যদি a খ এর চেয়ে বড় হয়
  • -1 যদি খ এর চেয়ে কম হয়
  • 0 যদি a খ এর সমান হয়

এখন আপনার সমস্যার জন্য আপনি ব্যবহার করতে পারেন

if (value.compareTo(BigDecimal.ZERO) > 0)

অথবা

if (value.compareTo(new BigDecimal(0)) > 0)

আমি আশা করি এটি আপনাকে সাহায্য করেছে


0

বিগডিসিমাল অবজেক্টে ".intValue ()" ব্যবহার করা যখন আপনি পরীক্ষা করতে চান এটির শূন্যের চেয়ে বেশি হয় না। ".CompareTo ()" পদ্ধতিটি কেবলমাত্র বাকি আছে।


-2
 BigDecimal obj = new BigDecimal("100");
 if(obj.intValue()>0)
    System.out.println("yes");

আপত্তিটি সংখ্যাযুক্ত স্ট্রিং ধারণ করে, গৃহীত উত্তরে মানটি ঘোষিত হয় না, বিভ্রান্তিকর হতে পারে। আমার উত্তর আরও স্পষ্টতা হবে।
রামা কৃষ্ণ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.