c# - দশমিককে দ্বিগুণ রূপান্তর করুন




floating-point type-conversion (9)

"দশমিক বনাম ডাবল?" জেনেরিক প্রশ্নের আরও জেনেরিক উত্তর: যথার্থতা সংরক্ষণের জন্য আর্থিক হিসাবের জন্য দশমিক , বৈজ্ঞানিক গণনার জন্য দ্বিগুণ যা ছোট পার্থক্যের দ্বারা প্রভাবিত হয় না। যেহেতু ডাবল একটি প্রকার যা সিপিইউতে আদি হয় (অভ্যন্তরীণ উপস্থাপনা বেস 2 এ সংরক্ষণ করা হয়), ডাবল দিয়ে তৈরি গণনাগুলি দশমিকের পরে আরও ভাল পারফর্ম করে (যা অভ্যন্তরীণভাবে বেস 10 তে প্রতিনিধিত্ব করা হয়)।

https://code.i-harness.com

আমি কোনও ফর্মের অস্বচ্ছতা পরিবর্তন করতে একটি ট্র্যাক-বার ব্যবহার করতে চাই।

এটি আমার কোড:

decimal trans = trackBar1.Value / 5000;
this.Opacity = trans;

আমি যখন অ্যাপ্লিকেশনটি তৈরি করি তখন এটি নিম্নলিখিত ত্রুটিটি দেয়:

decimal প্রকারের স্পষ্টত রূপান্তর করতে পারে না type

আমি trans এবং double ব্যবহার করার চেষ্টা করেছি কিন্তু তখন নিয়ন্ত্রণটি কাজ করে না। এই কোডটি অতীতে VB.NET প্রকল্পে দুর্দান্ত কাজ করেছে।


আপনার 5000 পরিবর্তে 5000.0 ব্যবহার করা উচিত।


আপনার দুটি সমস্যা আছে। প্রথমত, Opacity দশমিক মান নয়, একটি দ্বিগুণ প্রয়োজন। সংকলকটি আপনাকে বলছে যে দশমিক এবং দ্বিগুণের মধ্যে রূপান্তর হওয়ার সময় এটি স্পষ্ট রূপান্তর যা আপনাকে কাজ করার জন্য নির্দিষ্ট করতে হবে। দ্বিতীয়টি হ'ল TrackBar.Value একটি পূর্ণসংখ্যা মান এবং কোনও TrackBar.Value দ্বারা কোনও TrackBar.Value বিভাজক হয় কোন ফলাফলের ক্ষেত্রে আপনি এটি কোন ধরণের ভেরিয়েবল নির্ধারণ করেন। এই ক্ষেত্রে ইনট থেকে দশমিক বা ডাবল পর্যন্ত অন্তর্নিহিত isালাই রয়েছে - কারণ আপনি যখন কাস্ট করেন তখন নির্ভুলতার কোনও ক্ষতি হয় না - তাই trackBar.Value অভিযোগ করে না, তবে আপনি যে মান পাবেন তা সর্বদা 0, সম্ভবত trackBar.Value থেকে trackBar.Value সর্বদা 5000 এর চেয়ে কম থাকে The সমাধানটি হ'ল আপনার কোডটি ডাবল (ধরণের ধরণের ধরণের ক্ষেত্রে ব্যবহারের জন্য) পরিবর্তন করতে হবে এবং ধ্রুবকটিকে স্পষ্টভাবে দ্বিগুণ করে ফ্লোটিং পয়েন্ট গণিত করতে হবে - যার পাটিগণিত - বা trackBar.Value কাস্টিংয়ের প্রচারের প্রভাব পড়বে trackBar.Value দ্বিগুণ, যা একই জিনিস করবে - বা উভয়ই। ওহ, এবং অন্য কোনও জায়গায় ব্যবহার না করা হলে আপনাকে মধ্যবর্তী পরিবর্তনশীলের প্রয়োজন হবে না। আমার অনুমান যে সংকলকটি যেকোন উপায়ে এটি অপ্টিমাইজ করবে।

trackBar.Opacity = (double)trackBar.Value / 5000.0;

আপনি 5000 দিয়ে ভাগ করছেন কেন? কেবলমাত্র ট্র্যাকবারের ন্যূনতম এবং সর্বোচ্চ মান 0 এবং 100 এর মধ্যে সেট করুন এবং তারপরে অস্পষ্টতা শতাংশের জন্য মানটি 100 দ্বারা ভাগ করুন। নীচের সর্বনিম্ন 20 টি উদাহরণটি ফর্মটিকে সম্পূর্ণ অদৃশ্য হতে বাধা দেয়:

private void Form1_Load(object sender, System.EventArgs e)
{
    TrackBar1.Minimum = 20;
    TrackBar1.Maximum = 100;

    TrackBar1.LargeChange = 10;
    TrackBar1.SmallChange = 1;
    TrackBar1.TickFrequency = 5;
}

private void TrackBar1_Scroll(object sender, System.EventArgs e)
{
    this.Opacity = TrackBar1.Value / 100;
}

এটির মতো শোনাচ্ছে this.Opacity একটি দ্বিগুণ মান, এবং সংকলক পছন্দ করে না আপনি এটিতে একটি দশমিক মান this.Opacity করার চেষ্টা করছেন।


এর মতো double করার জন্য একটি স্পষ্ট কাস্ট প্রয়োজন নয়:

double trans = (double) trackBar1.Value / 5000.0;

ধ্রুবকটি 5000.0 (বা 5000.0 হিসাবে) হিসাবে চিহ্নিত করা যথেষ্ট:

double trans = trackBar1.Value / 5000.0;
double trans = trackBar1.Value / 5000d;

যেহেতু Opacity একটি দ্বৈত মান, আমি কেবল প্রথম থেকেই ডাবল ব্যবহার করব এবং একেবারেই নিক্ষেপ করব না, তবে বিভাজনকালে একটি ডাবল ব্যবহার করতে ভুলবেন না যাতে আপনি কোনও নির্ভুলতা আলগা না করেন

Opacity = trackBar1.Value / 5000.0;

সর্বোত্তম সমাধানটি হ'ল:

this.Opacity = decimal.ToDouble(trackBar1.Value/5000);

this.Opacity = trackBar1.Value / 5000d;




decimal