PDA

View Full Version : رند نشدن اعداد اعشاری



ssadegh1365
پنج شنبه 21 اسفند 1399, 17:51 عصر
باسلام خدمت همه اعضای عزیز
چرا وقتی مقدار اعشاری تو تکست باکس وارد میکنم خود سی شارپ رند میکنه
یا وقتی دو مقدار اعشاری رو جمع یا تفریق میکنم هم خودش گرد میکنه?
چون با محاسبات سروکار دارم باید مقدار دقیق بده بهم.
خیلی ممنون میشم هرکی بلده بگه بهم راه چاره رو?

the king
پنج شنبه 21 اسفند 1399, 18:14 عصر
باسلام خدمت همه اعضای عزیز
چرا وقتی مقدار اعشاری تو تکست باکس وارد میکنم خود سی شارپ رند میکنه
یا وقتی دو مقدار اعشاری رو جمع یا تفریق میکنم هم خودش گرد میکنه?
چون با محاسبات سروکار دارم باید مقدار دقیق بده بهم.
خیلی ممنون میشم هرکی بلده بگه بهم راه چاره رو?
مساله تبدیل عدد به رشته است. در TextBox.Text صرفا string قرار میگیره، برای همین در واقع نوع داده اعشاری رو به string تبدیل می کنید و قالبی که برای string انتخاب کرده اید گرد کردن داره.
فرضا عدد 0.999999 مادامی که تا 6 رقم بعد از اعشار تبدیل بشه کمتر از 1 خواهد بود اما با N2 به دو رقم بعد از اعشار گرد میشه و 1.00 خواهد شد :

float x = 0.999998f + 0.000001f;
textBox1.Text = x.ToString("N2", System.Globalization. CultureInfo. InvariantCulture);

و وقتی با R تبدیل بشه همون 0.999999 میمونه :

float x = 0.999998f + 0.000001f;
textBox1.Text = x.ToString("R", System.Globalization. CultureInfo. InvariantCulture);

ssadegh1365
پنج شنبه 21 اسفند 1399, 18:41 عصر
یعنی میگین تو کدوم رویداد تکست باکس کدوم کدوم بذارم؟

ssadegh1365
پنج شنبه 21 اسفند 1399, 18:42 عصر
منظورتون از قالبی که برای تکست باکس قرار دادین چیه دقیقا? میشه توضیح بدین

ssadegh1365
پنج شنبه 21 اسفند 1399, 18:51 عصر
تو سی شارپ دستورش چیه دقیقا؟ کدوم رویداد

the king
پنج شنبه 21 اسفند 1399, 19:12 عصر
یعنی میگین تو کدوم رویداد تکست باکس کدوم کدوم بذارم؟

کسی جز شما نمیدونه کدوم رویداد ئه، چون روال کد شما تعیین می کنه که چه کدی باید کجا نوشته بشه.
الزاما ربطی به رویداد های TextBox نداره، شما در جایی از کدتون مستقیم یا غیر مستقیم مقدار داخل TextBox.Text قرار می دهید.
اگر مستقیم در TextBox.Text مقدار می دهید، شبیه اون کدی است که در پست قبلی نوشتم.
تبدیل داده قالب (Format) داره، مثلا وقتی می نویسید x.ToString("N3") برای تبدیل x به string از قالب N3 استفاده کرده اید. قالب های استاندارد تبدیل عدد به رشته اینجا مشخص شده :
https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-numeric-format-strings

اگر هم از DataBinding استفاده می کنید و غیر مستقیم داخل TextBox مقدار قرار می دهید، بالای لیست مشخصه های TextBox در پنجره Properties ویژوال استدیو یک عنوان (DataBindings) هست که اگه با + بازش کنید زیرش دکمه ... روبروی (Advanced) داره که داخلش Format Type مشخص میشه، مثلا Custom Format ئه N2

Mahmoud.Afrad
جمعه 22 اسفند 1399, 04:03 صبح
باسلام خدمت همه اعضای عزیز
چرا وقتی مقدار اعشاری تو تکست باکس وارد میکنم خود سی شارپ رند میکنه
یا وقتی دو مقدار اعشاری رو جمع یا تفریق میکنم هم خودش گرد میکنه?
چون با محاسبات سروکار دارم باید مقدار دقیق بده بهم.
خیلی ممنون میشم هرکی بلده بگه بهم راه چاره رو?

چه نوع داده ای استفاده میکنید؟