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




7 Answers

এই মত ডবল একটি স্পষ্ট কাস্ট প্রয়োজনীয় নয়:

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

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

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

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

এই আমার কোড:

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

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

অন্তর্নিহিতভাবে টাইপ 'decimal' থেকে 'double' রূপান্তর করতে পারে না।

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




আপনার কোডটি VB.NET তে জরিমানা কাজ করেছে কারণ এটি নিখুঁতভাবে কোনও কাস্ট ব্যবহার করে, যদিও সি # উভয় অন্তর্নিহিত এবং সুস্পষ্ট উভয়ই থাকে।

সি # তে দশমিক থেকে দ্বিগুণ রূপান্তর আপনি স্পষ্টতা হারান হিসাবে স্পষ্ট। উদাহরণস্বরূপ 1.1 সঠিকভাবে ডবল হিসাবে প্রকাশ করা যাবে না, তবে দশমিক হিসাবে (কেন " ভাসমান বিন্দু সংখ্যাগুলি - আপনার কারণের চেয়ে আরও ভুল " দেখুন)।

ভিবিতে রূপান্তরকারী দ্বারা আপনার জন্য রূপান্তর যুক্ত করা হয়েছে:

decimal trans = trackBar1.Value / 5000m;
this.Opacity = (double) trans;

যে (double) স্পষ্টভাবে সি # এ বর্ণিত হতে হবে, কিন্তু ভিবি এর আরো 'ক্ষমাশীল' কম্পাইলার দ্বারা বোঝানো যেতে পারে।




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

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



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




Opacity সম্পত্তি দ্বিগুণ হয়:

double trans = trackBar1.Value / 5000.0;
this.Opacity = trans;

অথবা সহজভাবে:

this.Opacity = trackBar1.Value / 5000.0;

বা:

this.Opacity = trackBar1.Value / 5000d;

লক্ষ্য করুন যে আমি 5000.0 (অথবা 5000d ) ব্যবহার করছি একটি ডবল বিভাজন জোর করার জন্য, কারণ trackBar1.Value একটি পূর্ণসংখ্যা এবং এটি একটি পূর্ণসংখ্যা বিভাগ সম্পাদন করবে এবং ফলাফলটি পূর্ণসংখ্যা হবে।




সেরা সমাধান হল:

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



this.Opacity = trackBar1.Value / 5000d;



Related