/// <summary> /// Gets the string of a specific number. /// </summary> /// <param name="number">The number.</param> /// <returns>A string for the number.</returns> public string ToString(double number) { if (double.IsNaN(number)) { return("NaN"); } if (number > 0) { if (number <= ulong.MaxValue) { var numInt = (ulong)number; if (numInt == number) { return(ToString(numInt)); } } else if (double.IsPositiveInfinity(number)) { return(IsKana ? "せいのむげんだい" : "正の無限大"); } } else if (number > long.MinValue) { var numAbs = Math.Abs(number); var numInt = (ulong)numAbs; if (numInt == numAbs) { return(NegativeSign + ToString(numInt)); } } else if (double.IsNegativeInfinity(number)) { return(IsKana ? "ふのむげんだい" : "負の無限大"); } var str = new StringBuilder(); var(integerPart, fractionalPart, exponentialPart) = NumberSymbols.SplitNumber(number); str.Append(ToString(integerPart, false)); if (fractionalPart.Length > 0) { str.Append(IsKana ? "てん" : "点"); foreach (var item in fractionalPart) { if (IsKana) { str.Append(ConvertString(digits[int.Parse(item.ToString())].ToString())); } else { str.Append(digits[int.Parse(item.ToString())]); } } } if (exponentialPart > 0) { if (exponentialPart % 4 == 0 && exponentialPart < 45) { if (IsKana) { str.Append(ConvertString(digits[12 + exponentialPart / 4].ToString())); } else { str.Append(digits[12 + exponentialPart / 4]); } } else { str.Append(IsKana ? "かける" : "掛ける"); str.Append(TenClass); if (exponentialPart > 1) { str.Append("の"); str.Append(ToString(exponentialPart)); str.Append(IsKana ? "じょう" : "乗"); } } } return(str.ToString()); }
/// <summary> /// Gets the string of a specific number. /// </summary> /// <param name="number">The number.</param> /// <returns>A string for the number.</returns> public string ToString(double number) { if (double.IsNaN(number)) { return("not a number"); } if (number > 0) { if (number < 1) { if (number == 0.5) { return("a half"); } if (number == 1 / 3) { return("a third"); } if (number == 0.25) { return("a quarter"); } if (number == 0.2) { return("a fifth"); } if (number == 0.1) { return("ten percents"); } if (number == 0.01) { return("a percent"); } } if (number <= ulong.MaxValue) { var numInt = (ulong)number; if (numInt == number) { return(ToString(numInt)); } if (number == 1.5) { return("a half and one"); } if (number == 1.25) { return("a half and a quarter"); } if (number == 1.2) { return("a half and a fifth"); } } else if (double.IsPositiveInfinity(number)) { return("positive infinity"); } } else if (number > long.MinValue) { var numAbs = Math.Abs(number); var numInt = (ulong)numAbs; if (numInt == numAbs) { return(NegativeSign + ToString(numInt)); } } else if (double.IsNegativeInfinity(number)) { return("negative infinity"); } var str = new StringBuilder(); var(integerPart, fractionalPart, exponentialPart) = NumberSymbols.SplitNumber(number); str.Append(ToString(integerPart, false)); if (fractionalPart.Length > 0) { str.Append(" point "); str.Append(GetAllDigitsString(fractionalPart, fractionalPart.Length)); } if (exponentialPart > 0) { switch (exponentialPart) { case 1: str.Append(" times ten"); break; case 2: str.Append(" hundred"); break; case 3: str.Append(" thousand"); break; case 6: str.Append(" million"); break; case 9: str.Append(" billion"); break; case 12: str.Append(" trillion"); break; default: str.Append(" times ten of "); str.Append(ToString(exponentialPart)); str.Append(" power"); break; } } return(str.ToString()); }
/// <summary> /// Gets the string of a specific number. /// </summary> /// <param name="number">The number.</param> /// <returns>A string for the number.</returns> public string ToString(double number) { if (double.IsNaN(number)) { return(IsTraditional ? "不是數字" : "不是数字"); } if (number > 0) { if (number <= ulong.MaxValue) { var numInt = (ulong)number; if (numInt == number) { return(ToString(numInt)); } } else if (double.IsPositiveInfinity(number)) { return(IsTraditional ? "正無窮" : "正无穷"); } } else if (number > long.MinValue) { var numAbs = Math.Abs(number); var numInt = (ulong)numAbs; if (numInt == numAbs) { return(NegativeSign + ToString(numInt)); } } else if (double.IsNegativeInfinity(number)) { return(IsTraditional ? "負無窮" : "负无穷"); } var str = new StringBuilder(); var(integerPart, fractionalPart, exponentialPart) = NumberSymbols.SplitNumber(number); str.Append(ToString(integerPart, false)); if (fractionalPart.Length > 0) { str.Append(IsTraditional ? "點" : "点"); foreach (var item in fractionalPart) { str.Append(digits[int.Parse(item.ToString())]); } } if (exponentialPart > 0) { if (exponentialPart % 4 == 0 && exponentialPart < 41) { if (exponentialPart % 8 == 4) { str.Append(digits[13]); } else { str.Append(digits[14], exponentialPart / 8); } } else { str.Append("乘以"); str.Append(TenClass); if (exponentialPart > 1) { str.Append("的"); str.Append(ToString(exponentialPart)); str.Append("次方"); } } } return(str.ToString()); }