הנה
https://tchumim.com/post/5410
https://tchumim.com/assets/uploads/files/1517224421553-המרת-סכום-למילים.zip
קרדיט ל @רחמים
והנה עצמאי של @ארכיטקט מאותו מקום (יש שם עוד התייחסויות - כולל למרכזייה)
https://tchumim.com/post/5411
using 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;
}
}
}