סקריפט להקראת מספרים בעברית
-
@יוסף-בן-שמעון
מה שיש יהיה טוב
אבל אני כנראה מעדיף נוסחה, מאשר ספרייה בשפה שאני לא מכיר. -
@יוסף-בן-שמעון
בדיוק
זה לא אמור להיות משהו אדיר
אבל כנראה מישהו כתב את זה כבר.אולי אני ינסה להבין מה קורה באסטריסק
לראות איך הם עשו את זה. -
הנה
https://tchumim.com/post/5410
https://tchumim.com/assets/uploads/files/1517224421553-המרת-סכום-למילים.zip
קרדיט ל @רחמיםוהנה עצמאי של @ארכיטקט מאותו מקום (יש שם עוד התייחסויות - כולל למרכזייה)
https://tchumim.com/post/5411using System.Threading.Tasks; namespace HtmlTemplateEngine { public class ReplaceNumberToString { public string WordToSingleDigit(int Digit, bool Male, bool Base) { string functionReturnValue = null; // מערכים של מספרים string[] SeparateMale = new string[]{"", "אחד", "שנים", "שלשה", "ארבעה", "חמשה", "ששה", "שבעה", "שמונה", "תשעה", "עשרה", "עשרים", "שלשים", "ארבעים", "חמישים", "שישים", "שבעים", "שמונים", "תשעים"}; string[] BaseMale = new string[]{"", "אחד", "שני", "שלשת", "ארבעת", "חמשת", "ששת", "שבעת", "שמונת", "תשעת", "עשרת", "עשרים", "שלשים", "ארבעים", "חמישים", "שישים", "שבעים", "שמונים", "תשעים"}; string[] SeparateFemale = new string[]{"", "אחת", "שתים", "שלש", "ארבע", "חמש", "שש", "שבע", "שמונה", "תשע", "עשר", "עשרים", "שלשים", "ארבעים", "חמישים", "שישים", "שבעים", "שמונים", "תשעים"}; string[] BaseFemale = new string[]{"", "אחת", "שתי", "שלש", "ארבע", "חמש", "שש", "שבע", "שמונה", "תשע", "עשר", "עשרים", "שלשים", "ארבעים", "חמישים", "שישים", "שבעים", "שמונים", "תשעים"}; // הואיל והמערך מכיל גם מספרים של עשרים ומעלה // לכן יש לסדר את המספר הריאלי, ולהמיר אותו למספר המתאים למערך // כאן הוא מחזיר את המספר כפי שהוא נכון לגבי המערך if (Digit > 10) Digit = (Digit / 10) - 1 + 10; if (Male == true) { if (Base == true) { functionReturnValue = BaseMale[Digit]; return functionReturnValue; } else { functionReturnValue = SeparateMale[Digit]; return functionReturnValue; } } else if (Male == false) { if (Base == true) { functionReturnValue = BaseFemale[Digit]; return functionReturnValue; } else { functionReturnValue = SeparateFemale[Digit]; return functionReturnValue; } } return functionReturnValue; } public string ReplaceTextCurrency(double סכום) { string functionReturnValue = null; int שלמים = 0; int אגורות = 0; int עשרות_אלפים = 0; string טקסט_לשלמים = null; string טקסט_לעשרות_אלפים = null; string טקסט_לאגורות = null; string טקסט_למיליונים = null; if (סכום >= 1000000 | סכום == 0) { functionReturnValue = ""; return functionReturnValue; } שלמים = Convert.ToInt32(סכום); // שלמים = סכום; אגורות = Convert.ToInt32((סכום - Convert.ToInt32(סכום)) * 100); עשרות_אלפים = Convert.ToInt32((סכום - (סכום % 1000)) / 1000); if (עשרות_אלפים >= 10) שלמים = שלמים - (עשרות_אלפים * 1000);//Replace text טקסט_לשלמים = ReplaceTextFromDigit(שלמים, true, false); if (אגורות > 0) טקסט_לאגורות = " ו" + ReplaceTextFromDigit(אגורות, false, false) + " אגורות"; if (עשרות_אלפים > 10) טקסט_לעשרות_אלפים = ReplaceTextFromDigit(עשרות_אלפים, true, true); if (עשרות_אלפים >= 10) טקסט_לעשרות_אלפים = טקסט_לעשרות_אלפים + (עשרות_אלפים == 10 ? "עשרת אלפים" : " אלף") + (שלמים > 0 ? " ו" : " "); functionReturnValue = טקסט_לעשרות_אלפים + טקסט_לשלמים + (שלמים + עשרות_אלפים > 0 ? " שקלים" : "") + טקסט_לאגורות; return functionReturnValue; } public string ReplaceTextFromDigit(int מספר, bool Male, bool Base) { string functionReturnValue = null; // מחזיר טקסט ממספר עד לסכום של 9999 אלפים צריכים להיות מטופלים בנפרד בפונקציית המטבע //----------------------------- ERROR: Not supported in C#: OnErrorStatement if (מספר == 0) { functionReturnValue = ""; return functionReturnValue; } string טקסט_ליחידות = null; string טקסט_לעשרות = null; string טקסט_לעשרות_ויחידות = null; string טקסט_למאות = null; string טקסט_לאלפים = null; string טקסט_לעשרות_אלפים = null; string טקסט_לאגורות = null; string טקסט_לשלמים = null; int יחידות = 0; int עשרות = 0; int מאות = 0; int אלפים = 0; int עשרות_אלפים = 0; int יחידות_אגורות = 0; int עשרות_אגורות = 0; // מפרק את המספרים לערכים הדרושים // מכין את הערכים המספריים הדרושים יחידות = מספר % 10; עשרות = מספר % 100 - יחידות; מאות = (מספר % 1000 - עשרות - יחידות) / 100; אלפים = (מספר - (מספר % 1000)) / 1000; // מכין את הטקסט הדרוש // עושה שימוש בפונקציה מודולרית שנותנת ערכים למספרים בודדים // מכין את הטקסט לעשרות ויחידות if (יחידות + עשרות < 10) { טקסט_לעשרות_ויחידות = WordToSingleDigit(יחידות, Male, Base); } else if (יחידות + עשרות == 10) { טקסט_לעשרות_ויחידות = WordToSingleDigit(יחידות + עשרות, Male, false); } else if (יחידות + עשרות > 10 & יחידות + עשרות < 20) { טקסט_לעשרות_ויחידות = WordToSingleDigit(יחידות, Male, false); טקסט_לעשרות_ויחידות = טקסט_לעשרות_ויחידות + " " + WordToSingleDigit(עשרות, Male ^ true, false); } else if (יחידות + עשרות >= 20) { טקסט_ליחידות = WordToSingleDigit(יחידות, Male, false); טקסט_לעשרות = WordToSingleDigit(עשרות, Male, true); טקסט_לעשרות_ויחידות = טקסט_לעשרות + (יחידות > 0 ? " ו" : "") + טקסט_ליחידות; } if (עשרות + יחידות > 9 & עשרות + יחידות < 21 & מאות > 0) טקסט_לעשרות_ויחידות = "ו" + טקסט_לעשרות_ויחידות; // מכין את הטקסט למאות if (מאות == 1) { טקסט_למאות = "מאה"; } else if (מאות == 2) { טקסט_למאות = "מאתיים"; } else if (מאות > 2) { טקסט_למאות = WordToSingleDigit(מאות, false, true) + " מאות"; } // מכין את הטקסט לאלפים if (אלפים == 1) { טקסט_לאלפים = "אלף "; } else if (אלפים == 2) { טקסט_לאלפים = "אלפיים "; } else if (אלפים > 2 & אלפים < 10) { טקסט_לאלפים = WordToSingleDigit(אלפים, Male, true) + " אלפים"; } // מכין את הטקסטים כראוי להצגה על המסך עם ווי חיבור וכיוב if (אלפים > 0 & עשרות + יחידות == 0 & מאות > 0) טקסט_לאלפים = טקסט_לאלפים + " ו"; if (אלפים > 0 && ((עשרות + יחידות > 0) || (מאות > 0)) )//&& !(טקסט_לאלפים // ERROR: Unknown binary operator Like טקסט_לאלפים = טקסט_לאלפים + " "; טקסט_למאות = טקסט_למאות + ((עשרות + יחידות )> 0 ? " " : "") + ((אלפים > 0 | מאות > 0) & ((עשרות + יחידות < 10) & (עשרות + יחידות > 0)) ? "ו" : ""); string טקסט_לפני_הסרת_רווח = null; טקסט_לפני_הסרת_רווח = טקסט_לאלפים + טקסט_למאות + טקסט_לעשרות_ויחידות; // if (טקסט_לפני_הסרת_רווח // ERROR: Unknown binary operator Like //) // טקסט_לפני_הסרת_רווח = Strings.Right(טקסט_לפני_הסרת_רווח, Strings.Len(טקסט_לפני_הסרת_רווח) - 1); functionReturnValue = טקסט_לפני_הסרת_רווח; return functionReturnValue; } } }