Beispiel #1
0
        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)));
        }
Beispiel #2
0
        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);
        }
Beispiel #3
0
        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));
        }