עבור לתוכן

NumberStyles & IFormatProvider #c

Featured Replies

פורסם

הסתכלתי בתיעוד על השיטה parse של int וראיתי שם שאפשר להעביר לשיטה מחרוזת ועוד שני דברים NumberStyles IFormatPorvider, מישהו יכול להסביר מה אלה הדברים האלה? ואם בכלל משתמשים בהם? ניסיתי להסתכל בתיעוד שלהם ולא הבנתי מזה שום דבר. אשמח אם מישהו יוכל להסביר מה הם עושים. תודה.

פורסם

NumberStyles מאפשר לך להגדיר לParse איזה תווים מותר למחרוזת הקלט להכיל (לא כל דבר, אלא רק סט קבוע של אופציות). לדוגמה, באמצעות NumberStyles.AllowCurrencySymbol אתה מאפשר למחרוזת להכיל תו שמייצג מטבע כלשהו (כגון דולר או שקל) ובאמצעות NumberStyles.AllowThousands אתה מאפשר למחרוזת להכיל את הפסיקים שמפרידים בין אלפים (יענו זה יאפשר להעביר מחרוזת מהצורה 1,000,000). בתיעוד יש רשימה של כל האופציות ומה כל אחת עושה בדיוק.

IFormatProvider נותן לך לשלוט על זה בצורה קצת יותר דקדקנית, ספציפית זה נותן לך להגדיר פורמטים שתלויים בשפה שבה אתה משתמש. לדוגמה, בשפות מסויימות נהוג לכתוב מספרים מופרדים בפסיקים (כמו 1,000,000) ובשפות אחרות הם מופרדים בנקודות (כמו 1.000.000), ובאמצעות ה-Format Provider אתה יכול לקבוע במי מהם להשתמש.

פורסם
  • מחבר

כך חשבתי בהתחלה, אבל זה פועל על int ו-int לא מקבל לא פסיקים ולא תו שמייצג מטבע, ניסיתי את זה והוא כותב לי שגיאה הדפסתי את זה עם try cath והוא כותב לי "מחרוזת קלט לא הייתה בתבנית הנכונה".

זה הקוד שכתבתי:

[LEFT]try
{
string a = "$12,345,678";
int b = int.Parse(a, NumberStyles.AllowCurrencySymbol|NumberStyles.AllowThousands);
}
catch(Exception ex)
{
textBox1.Text = ex.Message;
}
[/LEFT]


נערך על-ידי eido300

פורסם

זה כי ה-Current Culture שלך מוגדר לעברית, שבה הסימן עבור מטבע הוא ₪ ולא $. אתה יכול לדעת מהו הסמל עבור ה-Culture הנוכחי באמצעות CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol.

בשביל לשלוט על הסימן הזה, אתה צריך להשתמש ב-Format Provider. בשביל זה סיפקו לך הרבה format providers מובנים הקרויים Culture Info שמותאמים לכל מיני "תרבויות" שונות, ואתה יכול ככה לבחור את זה שמתאים לך. במקרה שלך, לדוגמה, אתה רוצה לומר לו לפרסר את המספר לפי "אנגלית אמריקאית", ככה:

string a = "$12,345,678";int b = int.Parse(a, NumberStyles.AllowCurrencySymbol | NumberStyles.AllowThousands, CultureInfo.GetCultureInfo("en-US"));

באותו אופן על מנת לפרסר לפי עברית אתה צריך לבחור "he-IL", ויש כמובן עוד וריאציות עבור מדינות ושפות אחרות.

נערך על-ידי שניצל

פורסם
  • מחבר

אוקיי, תודה רבה

ארכיון

דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.

דיונים חדשים