ফ্লোটিং পয়েন্ট সংখ্যা পার্সিং: কোন ক্যাচ সব অ্যালগরিদম আছে?

মাল্টি-সাংস্কৃতিক প্রোগ্রামিংর একটি মজার অংশ হল সংখ্যা বিন্যাস।

  • আমেরিকানরা 10,000.50 ব্যবহার করে
  • জার্মানরা 10.000,50 ব্যবহার করে
  • ফরাসি ব্যবহার 10,000,50

আমার প্রথম পদ্ধতিটি স্ট্রিংটি নিতে হবে, এটি পশ্চাদপসরণ করা হবে, যতক্ষণ না আমি একটি বিভাজক সম্মুখীন হই এবং এটি আমার দশমিক বিভাজকের হিসাবে ব্যবহার করি। এর সঙ্গে একটি সুস্পষ্ট ত্রুটি আছে: 10.000 হিসাবে ব্যাখ্যা করা হবে 10।

আরেকটি পদ্ধতি: যদি স্ট্রিংটি 2 টি ভিন্ন অ-সাংখ্যিক অক্ষর থাকে, তবে শেষ বিভাজক হিসেবে দশমিক বিভাজক ব্যবহার করুন এবং অন্যদের বাদ দিন। যদি আমার কেবলমাত্র এক থাকে, তবে এটি একাধিকবার ঘটেছে কিনা তা পরীক্ষা করুন এবং এটি যদি বাতিল করে দেয়। এটি শুধুমাত্র একবার প্রদর্শিত হলে এটির পরে 3 টি সংখ্যা আছে কিনা তা পরীক্ষা করুন। যদি হ্যাঁ, এটি বাতিল করুন, অন্যথায় এটি দশমিক বিভাজক হিসাবে ব্যবহার করুন।

স্পষ্ট "সেরা সমাধান" ব্যবহারকারীর সংস্কৃতি বা ব্রাউজার সনাক্ত করা হবে, কিন্তু যদি আপনি একটি en-US উইন্ডোজ / ব্রাউজার ব্যবহার করে একটি ফরাসিম্যান আছে যে কাজ করে না।

.net ফ্রেমওয়ার্কটিতে কিছু কাল্পনিক কালো জাদুকরী ফ্লোটিং পয়েন্ট পার্সার থাকে যাটি ডাবল থেকে বেশি। (চেষ্টা করুন) পারস() নম্বর বিন্যাসটি স্বয়ংক্রিয় সনাক্ত করার চেষ্টা করছে?

0
যোগ সম্পাদিত
মতামত: 1

4 উত্তর

আমি সমস্যাটির ASP.NET পার্কে জানি না কিন্তু .নেট একটি সুন্দর শক্তিশালী শ্রেণী রয়েছে: সিস্টেম। Globalization.CultureInfo । আপনি একটি ডবল মান ধারণকারী স্ট্রিং প্যাড করতে নিম্নলিখিত কোড ব্যবহার করতে পারেন:

double d = double.Parse("100.20", CultureInfo.CurrentCulture);
//  -- OR --
double d = double.Parse("100.20", CultureInfo.CurrentUICulture);

যদি ASP.NET একরকম (যেমন HTTP অনুরোধ হেডার ব্যবহার করা হয়) বর্তমান ব্যবহারকারীর সংস্কৃতি ইফেক্টগুলিকে সংস্কৃতি ইনফোও এনে দেয়। বর্তমান চাষ বা সংস্কৃতি ইনফোক। ক্রিকইন ইউক্লুসিভ, এটি সূক্ষ্ম কাজ করবে।

0
যোগ

আপনি সবাইকে সন্তুষ্ট করতে পারবেন না যদি আমি 10/২000 এর দশকে প্রবেশ করি এবং কেউ দশ হাজার দশের দশকে প্রবেশ করে, তাহলে আপনি যে ইনপুটের সংস্কৃতির কিছু জ্ঞান ছাড়াই তা পরিচালনা করতে পারবেন না। একরকম সংস্কৃতির সন্ধান করুন (ব্রাউজার, সিস্টেম সেটিং - ব্যবহার কেস কি? এএসপি? অভ্যন্তরীণ অ্যাপ্লিকেশন, বা বিশ্বের কাছে খোলা?), অথবা প্রত্যাশিত ফর্ম্যাটিংয়ের একটি উদাহরণ প্রদান করুন এবং আপনি যে সবচেয়ে বিনয়ী পার্সার ব্যবহার করতে পারেন সম্ভবত কিছু মত:

double d = Double.Parse("5,000.00", NumberStyles.Any, CultureInfo.InvariantCulture);
0
যোগ

The difference between 12.345 in French and English is a factor of 1000. If you supply an expected range where max < 1000*min, you can easily guess.

উদাহরণস্বরূপ একটি ব্যক্তির উচ্চতা (শিশু এবং শিশুদের সহ) মিমি মধ্যে নিন।

200-3000 এর একটি পরিসীমা ব্যবহার করে, 1.800 বা 1,800 এর একটি ইনপুটকে আনুমানিকভাবে 1 মিটার এবং 80 সেন্টিমিটার হিসাবে ব্যাখ্যা করা যায়, তবে 9২300 বা 9২3,300 এর একটি ইনপুটকে নিখুঁতভাবে 91 সেন্টিমিটার এবং 2.3 মিলিমিটার হিসাবে ব্যাখ্যা করা যায়।

0
যোগ

আমি মনে করি আপনি এই ক্ষেত্রে সবচেয়ে ভাল করতে পারেন তাদের ইনপুট নিতে এবং তারপর তাদের দেখান কি আপনি মনে করেন তারা মানে যদি তারা মতানৈক্য করে, তাদের আপনি যে ফর্ম্যাটটি প্রত্যাশা করছেন তা দেখান এবং তাদের আবার প্রবেশ করতে পারেন।

0
যোগ