public static string GetString(decimal money, Action <ChineseNumberOptions> setOptions) { var options = new ChineseNumberOptions(); setOptions(options); return(GetString(money, options)); }
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); }
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); }