দশমিক বিন্দুর পরে আপনি ডার্টে কোনও ডাবলকে নির্ভুলতার একটি নির্দিষ্ট ডিগ্রীতে কীভাবে গোল করবেন?


111

একটি দ্বিগুণ দেওয়া, আমি এটি পিএইচপি এর বৃত্তাকার () ফাংশনের অনুরূপ দশমিক পয়েন্টের পরে প্রদত্ত সংক্ষিপ্ত পয়েন্টের সাথে গোল করতে চাই ।

ডার্ট ডক্সে আমি সবচেয়ে কাছের জিনিসটি ডাবল টু স্ট্রিংএএসপ্রেসিশন () খুঁজে পাই, তবে এটি আমার প্রয়োজন ঠিক নয় কারণ এটিতে যথাযথতার মোট পয়েন্টগুলির দশমিক বিন্দুর আগে অঙ্কগুলি অন্তর্ভুক্ত রয়েছে ।

উদাহরণস্বরূপ, toStringAsPrecision (3) ব্যবহার করে:

0.123456789 rounds to 0.123  
9.123456789 rounds to 9.12  
98.123456789 rounds to 98.1  
987.123456789 rounds to 987  
9876.123456789 rounds to 9.88e+3

সংখ্যার দৈর্ঘ্য বাড়ার সাথে সাথে আমি দশমিক স্থানের পরে যথাযথভাবে যথাযথতা হারাতে চাই।

উত্তর:


193

Num.toStringAsFixed () এর জন্য ডকগুলি দেখুন ।

স্ট্রিং টু স্ট্রিংএফিক্সড (ইন ভগ্নাংশডিজিট )

এর দশমিক-পয়েন্টের স্ট্রিং-উপস্থাপনা প্রদান করে।

স্ট্রিং প্রতিনিধিত্ব গণনা করার আগে এটিকে একটি ডাবলে রূপান্তর করে।

  • যদি এর পরম মানটি 10 ​​^ 21 এর চেয়ে বড় বা সমান হয় তবে এই পদ্ধতিগুলি এই টু স্ট্রিংএএসএক্সপেনশিয়াল () দ্বারা গুণিত একটি ঘনিষ্ঠ প্রতিনিধিত্ব প্রদান করে ।

উদাহরণ:

1000000000000000000000.toStringAsExponential(3); // 1.000e+21
  • অন্যথায় ফলাফল হ'ল দশমিক বিন্দুর পরে ভগ্নাংশ ডিজিট অঙ্কগুলির সাথে সর্বাধিক নিকটবর্তী স্ট্রিং প্রতিনিধিত্ব। যদি ভগ্নাংশ ডিজিটগুলি 0 এর সমান হয় তবে দশমিক পয়েন্ট বাদ দেওয়া হয়।

পরামিতি ভগ্নাংশ ডিজিটগুলি অবশ্যই একটি পূর্ণসংখ্যার সন্তুষ্টিজনক হতে হবে: 0 <= ভগ্নাংশ ডিজিট <= 20।

উদাহরণ:

1.toStringAsFixed(3);  // 1.000
(4321.12345678).toStringAsFixed(3);  // 4321.123
(4321.12345678).toStringAsFixed(5);  // 4321.12346
123456789012345678901.toStringAsFixed(3);  // 123456789012345683968.000
1000000000000000000000.toStringAsFixed(3); // 1e+21
5.25.toStringAsFixed(0); // 5

অবশ্যই গ্রহণযোগ্য + রেফারেন্স + ব্যাখ্যা + উদাহরণ হতে হবে
কোহলস

4
আমি যুক্তি দিচ্ছি যে এর অসঙ্গতিজনিত কারণে ব্যবহার করার জন্য গোলাকার পদ্ধতিটি toStringAsFixed () হয়। উদাহরণস্বরূপ, চেষ্টা করুন5.550.toStringAsFixed(1)
ব্রেন্ডন

0 টি স্থানে গোল করার সময়ও নজর রাখুন যেহেতু এক্সপ্রেশনটি তার ক্ষেত্রে একটি intপরিবর্তে ফিরে আসে doubleযেমন num.parse(50.123.toStringAsFixed(0)) is int- .toDouble()এটি এর শেষে যুক্ত করে স্থির করা যায়।
আবুলকা

62

num.toStringAsFixed () রাউন্ড। এটি আপনাকে নম্বরের (এন) দশমিক সংখ্যা (2) এর সাথে একটি স্ট্রিংয়ে পরিণত করে এবং তারপরে কোডের একটি মিষ্ট লাইনে এটি আপনার সংখ্যায় ফিরে যায়:

n = num.parse(n.toStringAsFixed(2));

6
এটি করার দ্রুততম উপায়। তবে এটি বোবা যে ডার্টের এটি করার সরাসরি উপায় নেই
থিংডিজিটাল

4
সম্প্রসারণ পদ্ধতি: extension NumberRounding on num { num toPrecision(int precision) { return num.parse((this).toStringAsFixed(precision)); } }
ভিট ভেরেস

27

উপরের সমাধানগুলি যথাযথভাবে গোলাকার সংখ্যাগুলি করে না। আমি ব্যবহার করি:

double dp(double val, int places){ 
   double mod = pow(10.0, places); 
   return ((val * mod).round().toDouble() / mod); 
}

নিশ্চিত হয়েছে, dp(5.550, 1)সঠিকভাবে এই গোলগুলি 5.6- সর্বাধিক জনপ্রিয় উত্তর থেকে ভিন্ন যা 5.5@ ব্রেন্ডন দেখিয়েছে এর কিছুটা ভুল উত্তর দেয় ।
আবুলকা

ডিপি-র জন্য কাজ করে না (.4৩.৪7৫০, ২) এটি .4৩.৪৮ এর পরিবর্তে .4৩.৪7 ফিরে আসে ক্যালকুলেটরসপ / ক্যালকুলেটরস / ম্যাথ / this এই লিঙ্কটি দেখুন
দীপ শাহ

20
void main() {
  int decimals = 2;
  int fac = pow(10, decimals);
  double d = 1.234567889;
  d = (d * fac).round() / fac;
  print("d: $d");
}

প্রিন্টস: 1.23


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

4
আরও উল্লেখ করার মতো যে, যদি জেএসে সংকলন করা হয়, তবে ডার্ট পূর্ণসংখ্যাগুলিও নির্ভুলতা হারাতে শুরু করবে এবং আপনাকে একটি প্যাকেজ ব্যবহার করতে হবে: pub.dartlang.org/packages/bignum
গ্রেগ লো

এই পদ্ধতিটি এটি করার জন্য বর্তমানের সেরা এবং সবচেয়ে মার্জিত উপায় বলে মনে হয় like
জিওভান্নি

ডাবল নির্ধারণ করা যাবে না ত্রুটি 3 লাইনে ঘটে
গায়ান প্যাটিরেজ


13

দশমিক বিন্দুর পরে ডার্টে একটি ডাবলকে নির্ভুলতার একটি নির্দিষ্ট ডিগ্রীতে গোল করতে, আপনি ডার্ট toStringAsFixed()পদ্ধতিতে অন্তর্নির্মিত সমাধানটি ব্যবহার করতে পারেন , তবে আপনাকে এটি আবার ডাবল রূপান্তর করতে হবে

void main() {
  double step1 = 1/3;  
  print(step1); // 0.3333333333333333
  
  String step2 = step1.toStringAsFixed(2); 
  print(step2); // 0.33 
  
  double step3 = double.parse(step2);
  print(step3); // 0.33
}


8

ডার্ট এক্সটেনশন পদ্ধতিগুলি ব্যবহার করে @ এবং এনডিইউ-র পরিবর্তিত উত্তর:

extension Precision on double {
    double toPrecision(int fractionDigits) {
        double mod = pow(10, fractionDigits.toDouble());
        return ((this * mod).round().toDouble() / mod);
    }
}

ব্যবহার:

var latitude = 1.123456;
var latitudeWithFixedPrecision = latitude.toPrecision(3); // Outputs: 1.123

7

toStringAsFixedদশমিক পয়েন্টের পরে সীমাবদ্ধ অঙ্কগুলি প্রদর্শন করতে আপনি ব্যবহার করতে পারেন । toStringAsFixedদশমিক-পয়েন্টের স্ট্রিং-প্রতিনিধিত্ব প্রদান করে। দশমিকের পরে কতগুলি অঙ্ক আমরা প্রদর্শন করতে চাই তার toStringAsFixedনাম যুক্তি গ্রহণ করে fraction Digits। এটি কিভাবে ব্যবহার করবেন তা এখানে।

double pi = 3.1415926;
const val = pi.toStringAsFixed(2); // 3.14

6

একটি এক্সটেনশন সংজ্ঞায়িত করুন:

extension Ex on double {
  double toPrecision(int n) => double.parse(toStringAsFixed(n));
}

ব্যবহার:

void main() {
  double d = 2.3456789;
  double d1 = d.toPrecision(1); // 2.3
  double d2 = d.toPrecision(2); // 2.35
  double d3 = d.toPrecision(3); // 2.345
}

2

আমি স্ট্রিংএফ্সিক্সড () পদ্ধতিটি ব্যবহার করতাম, দশমিক পয়েন্টের পরে নির্দিষ্ট সংখ্যায় গোল করে, ডাবল নাম্বার = 22.48132906 এবং যখন আমি দুটি সংখ্যার মতো করে গোল করি: মুদ্রণ (num.toStringAsFixed (2);

এটি 22.48 মুদ্রিত

এবং যখন আমি একটি সংখ্যায় গোল করি .. 22.5 মুদ্রিত


2

উপরের সমাধানগুলি সমস্ত ক্ষেত্রে কার্যকর হয় না। আমার সমস্যার জন্য যেটি কাজ করেছিল তা হ'ল এই সমাধানটি যা আপনার সংখ্যার (0.5 থেকে 1 বা 0.49 থেকে 0) গোল করবে এবং কোনও দশমিক ছাড়াই এটি ছেড়ে দেবে :

ইনপুট: 12.67

double myDouble = 12.67;
var myRoundedNumber; // Note the 'var' datatype

// Here I used 1 decimal. You can use another value in toStringAsFixed(x)
myRoundedNumber = double.parse((myDouble).toStringAsFixed(1));
myRoundedNumber = myRoundedNumber.round();

print(myRoundedNumber);

আউটপুট: 13

এই লিঙ্কে অন্যান্য সমাধানও রয়েছে


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