Esempio n. 1
0
        public static string GetString(decimal money, Action <ChineseNumberOptions> setOptions)
        {
            var options = new ChineseNumberOptions();

            setOptions(options);
            return(GetString(money, options));
        }
Esempio n. 2
0
        public static string GetString(decimal money, ChineseNumberOptions options)
        {
            var fractional100 = (int)(money % 1 * 100 % 100);

            string[] numberValues;
            string[] levels;
            if (options.Upper)
            {
                numberValues = ChineseNumber.UpperNumberValues;
                levels       = UpperLevels;
            }
            else
            {
                numberValues = ChineseNumber.LowerNumberValues;
                levels       = LowerLevels;
            }

            var    yuan = ChineseNumber.GetString(money, options);
            string ret;

            if (fractional100 == 0)
            {
                ret = $"{yuan}{levels[0]}整";
            }
            else if (fractional100 % 10 == 0)
            {
                ret = $"{yuan}{levels[0]}{numberValues[fractional100 / 10]}{levels[1]}整";
            }
            else
            {
                var jiao = fractional100 / 10;
                ret = $"{yuan}{levels[0]}{(jiao > 0 ? $"{numberValues[jiao]}{levels[1]}" : numberValues[0])}{numberValues[fractional100 % 10]}{levels[2]}";
            }

            return(ret);
        }
Esempio n. 3
0
        public static string GetString(decimal number, ChineseNumberOptions options)
        {
            number = decimal.Floor(number);

            string[] numberValues;
            string[] levels;
            if (options.Upper)
            {
                numberValues = UpperNumberValues;
                levels       = UpperLevels;
            }
            else
            {
                numberValues = LowerNumberValues;
                levels       = LowerLevels;
            }

            string GetPartString(char[] singles, string level)
            {
                if (!singles.Any())
                {
                    return(string.Empty);
                }

                var sb   = new StringBuilder();
                var zero = false;

                foreach (var kv in singles.AsKvPairs())
                {
                    if (kv.Value != '0')
                    {
                        var value            = numberValues[kv.Value - '0'];
                        var singleNumberUnit = levels[LEVEL_COUNT - singles.Length + kv.Key];

                        if (zero)
                        {
                            sb.Append($"{numberValues[0]}{value}{singleNumberUnit}");
                        }
                        else
                        {
                            sb.Append($"{value}{singleNumberUnit}");
                        }

                        zero = false;
                    }
                    else
                    {
                        zero = true;
                    }
                }
                sb.Append(level);

                return(sb.ToString());
            }

            //TODO: Use Linqsharp to calculate
            var levelParts = number.ToString()
                             .For(parts => parts.AsKvPairs()
                                  .GroupBy(x => (x.Key + (4 - parts.Length % 4)) / 4)
                                  .Select(g => g.Select(x => x.Value).ToArray()))
                             .ToArray();
            var ret = levelParts.Select((v, i) => GetPartString(v, SuperiorLevels[SuperiorLevels.Length - levelParts.Length + i])).Join("");

            if (options.Simplified && (ret.StartsWith("一十") || ret.StartsWith("壹拾")))
            {
                ret = ret.Substring(1);
            }

            return(ret);
        }