blob: de2fdb16e1725e54321bd63448271f58cfbb93af [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using NUnit.Framework;
namespace Lucene.Net.Util
{
public class English
{
public static System.String IntToEnglish(int i)
{
System.Text.StringBuilder result = new System.Text.StringBuilder();
IntToEnglish(i, result);
return result.ToString();
}
public static void IntToEnglish(int i, System.Text.StringBuilder result)
{
if (i == 0)
{
result.Append("zero");
return ;
}
if (i < 0)
{
result.Append("minus ");
i = - i;
}
if (i >= 1000000000)
{
// billions
IntToEnglish(i / 1000000000, result);
result.Append("billion, ");
i = i % 1000000000;
}
if (i >= 1000000)
{
// millions
IntToEnglish(i / 1000000, result);
result.Append("million, ");
i = i % 1000000;
}
if (i >= 1000)
{
// thousands
IntToEnglish(i / 1000, result);
result.Append("thousand, ");
i = i % 1000;
}
if (i >= 100)
{
// hundreds
IntToEnglish(i / 100, result);
result.Append("hundred ");
i = i % 100;
}
if (i >= 20)
{
switch (i / 10)
{
case 9: result.Append("ninety"); break;
case 8: result.Append("eighty"); break;
case 7: result.Append("seventy"); break;
case 6: result.Append("sixty"); break;
case 5: result.Append("fifty"); break;
case 4: result.Append("forty"); break;
case 3: result.Append("thirty"); break;
case 2: result.Append("twenty"); break;
}
i = i % 10;
if (i == 0)
result.Append(" ");
else
result.Append("-");
}
switch (i)
{
case 19: result.Append("nineteen "); break;
case 18: result.Append("eighteen "); break;
case 17: result.Append("seventeen "); break;
case 16: result.Append("sixteen "); break;
case 15: result.Append("fifteen "); break;
case 14: result.Append("fourteen "); break;
case 13: result.Append("thirteen "); break;
case 12: result.Append("twelve "); break;
case 11: result.Append("eleven "); break;
case 10: result.Append("ten "); break;
case 9: result.Append("nine "); break;
case 8: result.Append("eight "); break;
case 7: result.Append("seven "); break;
case 6: result.Append("six "); break;
case 5: result.Append("five "); break;
case 4: result.Append("four "); break;
case 3: result.Append("three "); break;
case 2: result.Append("two "); break;
case 1: result.Append("one "); break;
case 0: result.Append(""); break;
}
}
[STAThread]
public static void Main(System.String[] args)
{
System.Console.Out.WriteLine(IntToEnglish(System.Int32.Parse(args[0])));
}
}
}