আমি কীভাবে ডেটা স্ট্রিং থেকে লম্বা লম্বায় রূপান্তর করতে পারি?


105

আমি কীভাবে স্ট্রিং থেকে ডেটা সি-তে দীর্ঘ রূপান্তর করতে পারি?

আমার কাছে ডেটা আছে

String strValue[i] ="1100.25";

এখন আমি এটি ভিতরে চান

long l1;

4
লংগুলি পূর্ণসংখ্যার প্রতিনিধিত্ব করে। আপনি একটি অ-পূর্ণসংখ্যা দিয়েছেন। আপনি এটি দিয়ে কি করতে চান?
জন স্কিটি

4
যদি strValue "1100.75" হয়? দেখুন: stackoverflow.com/questions/633335/…
ম্যাগমা

@magma: আপনার কাছে যদি দশমিক রূপান্তর তারপর এটি বন্ধ নম্বর, অর্থাত এই ক্ষেত্রে সুসম্পন্ন হবে প্রদত্ত সংখ্যার 1100,75 ছিল তারপর এটা করবে আউটপুট 1101.
প্রেম কম্পিউটার বিজ্ঞান

4
@ চার্লি আমি কেবল বিষয়টি উত্থাপন করছিলাম, কারণ মেইপি এখানে এর অর্থ সম্পর্কে পুরোপুরি সচেতন বলে মনে হয় নি। তিনি কেবল কোনও বৃত্তাকার ছাড়াই অ-পূর্ণসংখ্যার অংশটি থেকে মুক্তি দিতে চাইতে পারেন এবং এটি ঠিক আছে, যদি তারা সত্যই এটি চায়। ধন্যবাদ যদিও.
ম্যাগমা

উত্তর:


190

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

Convert.ToInt64("1100.25")

এমএসডিএন থেকে পদ্ধতি স্বাক্ষর:

public static long ToInt64(
    string value
)

4
এইভাবে আমি এটি করেছি। সঠিক উত্তর হিসাবে চিহ্নিত করা উচিত।
সানপাকো

4
এটি স্ট্রিংটি সঠিক ফর্ম্যাট ব্যতিক্রম নয়।
বাদোন জৈন

এটি কাজ করে না। সিস্টেম ফর্ম্যাট ব্যতিক্রম ত্রুটি। একটি অক্ষর বিন্যাসে অক্ষর শৃঙ্খলে কিছু সমস্যা।
রিকার্ডো আরাজিও

এটি সঠিক .... এটি 2013 এর মতো কাজ করবে বলে মনে হচ্ছে না shortly আমি শীঘ্রই একটি আপডেট পোস্ট করব।
বেলম্যান

46

আপনি যদি এই সংখ্যার পূর্ণসংখ্যার অংশ পেতে চান তবে আপনাকে অবশ্যই প্রথমে এটি একটি ভাসমান সংখ্যায় রূপান্তর করতে হবে এবং তারপরে দীর্ঘস্থায় প্রবেশ করতে হবে।

long l1 = (long)Convert.ToDouble("1100.25");

আপনি নিজের Mathপছন্দ মতো নম্বরটি গোল করতে ক্লাস ব্যবহার করতে পারেন, বা কেবল ছাঁটাবেন ...


আপনি FormatExceptionযদি নির্দিষ্ট ইনপুটটিতে এটি চালান তবে এটি আপনাকে দিতে চলেছে ।
অ্যান্ড্রু সাবিনিখ

4
@ জেসপ্রি, না, কমপক্ষে বেশিরভাগ সংস্কৃতিতে নয় ... তবে এটি সম্ভবত সংস্কৃতিতে ব্যর্থ হবে যেখানে দশমিক বিভাজক নেই "।
টমাস লেভেস্ক

আপনার কোড ব্যবহার করে, এই মানটি 2037104000005652013 2037104000005651968 এ পরিবর্তিত হয়েছে?
প্রণেশ জনার্থনন

20

এছাড়াও আপনি ব্যবহার করতে পারেন long.TryParseএবং long.Parse

long l1;
l1 = long.Parse("1100.25");
//or
long.TryParse("1100.25", out l1);


6

দশমিক বিন্দুর কারণে আপনি এটিকে সরাসরি দীর্ঘায়িত করতে সক্ষম হবেন না বলে আমার মনে হয় আপনার এটিকে দশমিক রূপান্তর করা উচিত এবং তারপরে এটিকে দীর্ঘ কিছুতে রূপান্তর করা উচিত:

String strValue[i] = "1100.25";
long l1 = Convert.ToInt64(Convert.ToDecimal(strValue));

আশাকরি এটা সাহায্য করবে!


3

দীর্ঘকাল অভ্যন্তরীণভাবে System.Int64 হিসাবে উপস্থাপিত হয় যা একটি 64-বিট স্বাক্ষরিত পূর্ণসংখ্যা। "1100.25" আপনি যে মানটি নিয়েছেন তা বাস্তবে দশমিক এবং পূর্ণসংখ্যার নয় তাই এটি দীর্ঘস্থায় রূপান্তর করা যায় না।

তুমি ব্যবহার করতে পার:

String strValue = "1100.25";
decimal lValue = Convert.ToDecimal(strValue);

এটি দশমিক মান রূপান্তর করতে



1

আপনি Int64.TryParseমেথড ব্যবহার করেও করতে পারেন । এটি '0' ফিরিয়ে দেবে যদি তাদের কোনও স্ট্রিং মান হয় তবে ত্রুটি উত্পন্ন হয় না।

Int64 l1;

Int64.TryParse(strValue, out l1);

0

আপনি আপনার নিজস্ব রূপান্তর ফাংশন তৈরি করতে পারেন:

    static long ToLong(string lNumber)
    {
        if (string.IsNullOrEmpty(lNumber))
            throw new Exception("Not a number!");
        char[] chars = lNumber.ToCharArray();
        long result = 0;
        bool isNegative = lNumber[0] == '-';
        if (isNegative && lNumber.Length == 1)
            throw new Exception("- Is not a number!");

        for (int i = (isNegative ? 1:0); i < lNumber.Length; i++)
        {
            if (!Char.IsDigit(chars[i]))
            {
                if (chars[i] == '.' && i < lNumber.Length - 1 && Char.IsDigit(chars[i+1]))
                {
                    var firstDigit = chars[i + 1] - 48;
                    return (isNegative ? -1L:1L) * (result + ((firstDigit < 5) ? 0L : 1L));    
                }
                throw new InvalidCastException($" {lNumber} is not a valid number!");
            }
            result = result * 10 + ((long)chars[i] - 48L);
        }
        return (isNegative ? -1L:1L) * result;
    }

এটি আরও উন্নত করা যেতে পারে:

  • কর্মক্ষমতা অনুযায়ী
  • বৈধতাটিকে আরও শক্ত করে তুলুন এই অর্থে যে বর্তমানে দশমিকের পরে অক্ষর সংখ্যা না হলে এটি বর্তমানে যত্ন করে না
  • রূপান্তর ফাংশনটির জন্য পরামিতি হিসাবে বৃত্তাকার আচরণ নির্দিষ্ট করুন specify এটি বর্তমানে গোল করে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.