একটি ফর্ম অপাসিটি প্রয়োগ করার সময়, আমরা একটি দশমিক বা একটি ডবল মান ব্যবহার করা উচিত?

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

এটি আমার কোড:

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

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

নিখুঁতভাবে টাইপ করতে পারে না 'দশমিক' থেকে 'double'

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

0
যোগ সম্পাদিত
মতামত: 55
এছাড়াও, দশমিক একটি ডাবল হিসাবে বিস্তৃত একটি মান হিসাবে প্রতিনিধিত্ব করতে পারে না দশমিক শুধুমাত্র +/- 7.9228162514264337593543950335E + 28 পর্যন্ত যেতে পারে; যদিও একটি ডবল +/- 1.79769313486232E + 308 পর্যন্ত যেতে পারে
যোগ লেখক TraumaPony, উৎস

13 উত্তর

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

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

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

double trans = trackBar1.Value / 5000.0;
double trans = trackBar1.Value / 5000d;
1
যোগ

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

0
যোগ

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

0
যোগ

আমার মতে, এটি সম্ভব হিসাবে স্পষ্ট হিসাবে আকাঙ্ক্ষিত। এই কোডের স্পষ্টতা যোগ করে এবং আপনার সহকর্মী প্রোগ্রামারদের সাহায্য করতে পারে যারা এটি পড়তে পারে।

সংখ্যার একটি .0 যোগ করার (বা পরিবর্তে) ছাড়াও, আপনি দশমিক ব্যবহার করতে পারেন। ToDouble()

এখানে কিছু উদাহরন:

// Example 1
double transperancy = trackBar1.Value/5000;
this.Opacity = decimal.ToDouble(transperancy);

// Example 2 - with inline temp
this.Opacity = decimal.ToDouble(trackBar1.Value/5000);
0
যোগ

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

trackBar.Opacity = (double)trackBar.Value / 5000.0;
0
যোগ

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

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

কম্পাইলার দ্বারা VB রূপান্তর আপনার জন্য যোগ করা হয়েছিল:

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

যে (ডাবল) </ কোড> স্পষ্টভাবে C# এ বর্ণিত হবে, কিন্তু VB এর আরো 'ক্ষমা' কম্পাইলার দ্বারা নিহিত </ em> হতে পারে।

0
যোগ

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

this.Opacity = decimal.ToDouble(trackBar1.Value/5000);
0
যোগ

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

0
যোগ

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

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;
}
0
যোগ

অপ্রাসঙ্গিক সম্পত্তিটি ডাবল টাইপের :

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 একটি পূর্ণসংখ্যা এবং এটি একটি পূর্ণসংখ্যা বিভাগ সম্পাদন করবে এবং ফলাফলটি একটি পূর্ণসংখ্যা হবে ।

0
যোগ

ধরুন আপনি WinForms ব্যবহার করছেন, ফর্ম। অপেক্ষাকৃততা </কোড> দ্বিগুণ টাইপের, তাই আপনার ব্যবহার করা উচিত:

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

আপনি অন্য কোথাও মান প্রয়োজন না হলে, এটি লিখতে সহজ:

this.Opacity = trackBar1.Value / 5000.0;

আপনি আপনার কোড পরিবর্তিত হলে নিয়ন্ত্রণটি কাজ করে না কারণ আপনি একটি ডবল ছিল কেবল কারণ ছিল:

double trans = trackbar1.Value / 5000;

যা একটি সংখ্যার হিসাবে 5000 ব্যাখ্যা করেছে, তাই আপনার ট্রান্স </কোড> মান সবসময় শূন্য ছিল। .0 যোগ করে সংখ্যার একটি ফ্লোটিং পয়েন্ট মান তৈরি করে, কম্পাইলার এখন দ্বিগুণ হিসাবে ব্যাখ্যা করতে পারেন এবং যথাযথ গণনা করতে পারেন।

0
যোগ

যেহেতু অপাসিটি </কোড> একটি দ্বিগুণ মান, আমি প্রারম্ভিক থেকে দ্বিগুণ ব্যবহার করবো না এবং একেবারে ঢেকে ফেলব না, তবে বিভাজ করার সময় দ্বিগুণ ব্যবহার করতে ভুলবেন না যাতে আপনি কোনও নির্ভুলতা বাদ দেন না

Opacity = trackBar1.Value / 5000.0;
0
যোগ
this.Opacity = trackBar1.Value / 5000d;
0
যোগ