আমার দশমিক ডেটা টাইপের "1.2345E-02" স্ট্রিংটি (এক্সফেনশনাল নোটেশনে প্রকাশিত একটি সংখ্যা) পার্স করা দরকার তবে Decimal.Parse("1.2345E-02")
কেবল একটি ত্রুটি ছুঁড়ে ফেলা উচিত
উত্তর:
এটি একটি ভাসমান পয়েন্ট নম্বর, আপনাকে এটি বলতে হবে যে:
decimal d = Decimal.Parse("1.2345E-02", System.Globalization.NumberStyles.Float);
আপনি উল্লেখ করলে এটি কাজ করে NumberStyles.Float
:
decimal x = decimal.Parse("1.2345E-02", NumberStyles.Float);
Console.WriteLine(x); // Prints 0.012345
এটি সম্পূর্ণরূপে নিশ্চিত নই কেন এটি ডিফল্টরূপে সমর্থিত নয় - ডিফল্টটি ব্যবহার করা হয় NumberStyles.Number
, যা AllowLeadingWhite, AllowTrailingWhite, AllowLeadingSign, AllowTrailingSign, AllowDecimalPoint এবং AllowTh হাজার হাজার শৈলী ব্যবহার করে। সম্ভবত এটি কার্য সম্পাদন সম্পর্কিত; আমি মনে করি যে কোনও অভিজাতকে উল্লেখ করা তুলনামূলকভাবে বিরল।
decimal
সাথে প্রতিস্থাপন করা double
আমার পক্ষে ঠিক কাজ করে, যেমনটি আমি এটি আশা করতাম। আপনি প্রদান করতে পারে এমন বিবরণ আপনি করার চেষ্টা করছেন কি, কোড আপনি ব্যবহার করছেন, এবং ফলাফল, এটা অনেক সাহায্য করা আরো সহজ হবে।
নম্বর স্টাইলগুলি নির্দিষ্ট করে দেওয়ার পাশাপাশি আমি আপনাকে সুপারিশ করব যে আপনি দশমিকটি ব্যবহার করুন ry ট্রাইপার্স ফাংশন যেমন:
decimal result;
if( !decimal.TryParse("1.2345E-02", NumberStyles.Any, CultureInfo.InvariantCulture, out result) )
{
// do something in case it fails?
}
নাম্বার স্টাইলস এর বিকল্প হিসাবে.আপনি আপনার ফর্ম্যাটগুলির বিষয়ে নিশ্চিত হন তবে আপনি একটি নির্দিষ্ট সেট ব্যবহার করতে পারেন। যেমন:
NumberStyles.AllowExponent | NumberStyles.Float
নির্বাচিত উত্তর সম্পর্কে সতর্ক থাকুন: একটি সাবটিলিটি নির্দিষ্ট করে আছে সিস্টেম রয়েছে G গ্লোবালাইজেশন স্টাইলস ফ্ল্যাট P পার্স যা কোনও সিস্টেমের দিকে নিয়ে যেতে পারে For
উদাহরণস্বরূপ, ফরাসি স্বরলিপিতে, "1.2345E-02" অবৈধ, আপনাকে প্রথমে এটি "1,2345E-02" তে রূপান্তর করতে হবে।
উপসংহারে, এর লাইনে কিছু ব্যবহার করুন:
Decimal.Parse(valueString.Replace('.',','), System.Globalization.NumberStyles.Float);
আমি খুঁজে পেয়েছি যে NumberStyles.Float
কিছু ক্ষেত্রে, স্ট্রিং প্রক্রিয়াজাতকরণের নিয়মগুলি পরিবর্তিত করে এবং এর থেকে পৃথক আউটপুট তৈরি হয় NumberStyles.Number
(এর দ্বারা ব্যবহৃত ডিফল্ট বিধিগুলিdecimal.Parse
)।
উদাহরণস্বরূপ, নিম্নলিখিত কোডগুলি FormatException
আমার মেশিনে একটি উত্পন্ন করবে :
CultureInfo culture = new CultureInfo("");
culture.NumberFormat.NumberDecimalDigits = 2;
culture.NumberFormat.NumberDecimalSeparator = ".";
culture.NumberFormat.NumberGroupSeparator = ",";
Decimal.Parse("1,234.5", NumberStyles.Float, culture); // FormatException thrown here
আমি ইনপুটটি ব্যবহার করার পরামর্শ দেব NumberStyles.Number | NumberStyles.AllowExponent
, কারণ এটি ক্ষতিকারক সংখ্যার অনুমতি দেবে এবং decimal
নিয়মের আওতায় স্ট্রিংটি প্রক্রিয়া করবে ।
CultureInfo culture = new CultureInfo("");
culture.NumberFormat.NumberDecimalDigits = 2;
culture.NumberFormat.NumberDecimalSeparator = ".";
culture.NumberFormat.NumberGroupSeparator = ",";
Decimal.Parse("1,234.5",NumberStyles.Number | NumberStyles.AllowExponent, culture); // Does not generate a FormatException
পোস্টারের প্রশ্নের উত্তর দেওয়ার জন্য পরিবর্তে সঠিক উত্তরটি হওয়া উচিত:
decimal x = decimal.Parse("1.2345E-02", NumberStyles.Number | NumberStyles.AllowExponent);
Console.WriteLine(x);
নাম্বার স্টাইল ব্যবহার করার বিষয়ে সতর্কতা Aএই:
"6.33E + 03" প্রত্যাশা অনুযায়ী 6330 এ রূপান্তর করে। জার্মান ভাষায়, দশমিক পয়েন্টগুলি কমা দ্বারা প্রতিনিধিত্ব করা হয়, তবে 6,33E + 03 633000 এ রূপান্তর করে! এটি আমার গ্রাহকদের জন্য সমস্যা, যেহেতু সংস্কৃতি যা ডেটা উত্পন্ন করে তা জানা যায়নি এবং ডেটাতে পরিচালিত সংস্কৃতি থেকে আলাদা হতে পারে। আমার ক্ষেত্রে, আমার কাছে সর্বদা বৈজ্ঞানিক স্বরলিপি রয়েছে, তাই আমি বিশ্লেষণের আগে আমি সর্বদা কমাটি দশমিক বিন্দুতে প্রতিস্থাপন করতে পারি তবে আপনি যদি স্বেচ্ছাসেবী সংখ্যাগুলির সাথে কাজ করছেন তবে 1,234,567 এর মতো সুন্দর-ফর্ম্যাট সংখ্যার মতো সেই পদ্ধতির কাজ হয় না।
আপনার বিন্দুগুলি প্রতিস্থাপন করতে হবে না (যথাক্রমে কমা) কেবলমাত্র ইনপুটটি আইফোর্মেটপ্রাইডার নির্দিষ্ট করে:
float d = Single.Parse("1.27315", System.Globalization.NumberStyles.Float, new CultureInfo("en-US"));
float d = Single.Parse("1,27315", System.Globalization.NumberStyles.Float, new CultureInfo("de-DE"));
আপনি যদি চেক এবং রূপান্তর করতে চান তবে এটি ব্যবহার করুন value
string val = "1.2345E-02";
double dummy;
bool hasExponential = (val.Contains("E") || val.Contains("e")) && double.TryParse(val, out dummy);
if (hasExponential)
{
decimal d = decimal.Parse(val, NumberStyles.Float);
}
আশা করি এটি কাউকে সাহায্য করবে।
এর NumberStyle
জন্য ডিফল্ট decimal.Parse(String)
হ'ল NumberStyles.Number
তাই আপনি যদি কেবল এক্সপোশনগুলিকে অনুমতি দেওয়ার জন্য কার্যকারিতা যুক্ত করতে চান তবে আপনি কিছুটা দিক দিয়ে বা এতে অন্তর্ভুক্ত করতে পারেন NumberStyles.AllowExponent
।
decimal d = decimal
.Parse("1.2345E-02", NumberStyles.Number | NumberStyles.AllowExponent);