public string ToNumber(decimal number, NumberWriterSettings settings) { bool?femenin = settings.UnitGender == 'f' ? (bool?)true : settings.UnitGender == 'm' ? (bool?)false : null; string?signo = null; string?integerPart = null; string?decimalPart = null; if (number < 0) { signo = "menos"; number = -number; } //convertimos en text0 long integer = (long)number; integerPart = ConvertNumber(integer, femenin, settings.Unit, settings.UnitPlural); decimal decimAux = (number - integer); for (int i = 0; i < settings.NumberOfDecimals; i++) { decimAux *= 10m; } long decim = (long)decimAux; if (decim != decimAux) { throw new ApplicationException(string.Format("number has more than {0} decimal values", settings.NumberOfDecimals)); } if (decim != 0 || !settings.OmitDecimalZeros) { decimalPart = ConvertNumber(decim, femenin, settings.DecimalUnit, settings.DecimalUnitPlural); } return(" ".Combine(signo, " con ".Combine(integerPart, decimalPart))); }
public string ToNumber(decimal number, NumberWriterSettings settings) { /// <summary> /// Converts a decimal to its written text. e.g. 12 --> "zwölf" /// </summary> /// <param name="number">Number to be written as text. Can only be greater equal to 0 and less then one billion </param> /// <returns>String number</returns> /// string[] numberString = number.ToString(de).Split(','); string euro = numberString[0]; string output = ""; if (number < 0) { throw new Exception(" Can not convert values under 0 to a String"); } if (1000000000 < number) { throw new Exception(" Can not convert values over a billion to a String"); } if (number < 1) { output += "Null"; } else { if (euro.Length <= 3 && euro.Length > 0) // 0 -> 999 { output = GetUpToThousand(Convert.ToInt32(euro)); } else if (euro.Length <= 6 && euro.Length > 3) //1000 -> 999.999 { string hunderter = euro.Substring(euro.Length - 3); string tausender = euro.Substring(0, euro.Length - 3); output = GetUpToThousand(Convert.ToInt32(tausender)) + "tausend" + GetUpToThousand(Convert.ToInt32(hunderter)); } else if (euro.Length <= 9 && euro.Length > 6) { string hunderter = euro.Substring(euro.Length - 3); string tausender = euro.Substring(euro.Length - 6, 3); string million = euro.Substring(0, euro.Length - 6); //Ausnahme falls eine million if (1000000 <= number && number < 2000000) { output = "eine Million"; if (Convert.ToInt32(tausender) != 0) { output += GetUpToThousand(Convert.ToInt32(tausender)) + "tausend"; } output += GetUpToThousand(Convert.ToInt32(hunderter)); } else { output = GetUpToThousand(Convert.ToInt32(million)) + " Millionen "; if (Convert.ToInt32(tausender) != 0) { output += GetUpToThousand(Convert.ToInt32(tausender)) + "tausend"; } output += GetUpToThousand(Convert.ToInt32(hunderter)); } } } //cent operation if (settings.NumberOfDecimals == 2) { if (numberString.Length < 2) { output += " 00/100"; } else { output += " " + numberString[1] + "/100"; } } return(output); }
public string ToNumber(decimal number, NumberWriterSettings settings) { bool? femenin = settings.UnitGender == 'f' ? (bool?)true : settings.UnitGender == 'm' ? (bool?)false : null; string signo = null; string integerPart = null; string decimalPart = null; if (number < 0) { signo = "menos"; number = -number; } //convertimos en text0 long integer = (long)number; long integerMod1Mill = integer % 1000000; integerPart = ConvertNumber(integer, femenin, settings.Unit, settings.UnitPlural); decimal decimAux = (number - integer); for (int i = 0; i < settings.NumberOfDecimals; i++) decimAux *=10m; long decim = (long)decimAux; if (decim != decimAux) throw new ApplicationException(string.Format("number has more than {0} decimal values", settings.NumberOfDecimals)); if (decim != 0 || !settings.OmitDecimalZeros) { decimalPart = ConvertNumber(decim, femenin, settings.DecimalUnit, settings.DecimalUnitPlural); } return " ".Combine(signo, " con ".Combine(integerPart, decimalPart)); }