Сообщение от Wolsh
(Сообщение 959404)
Код AS3:
package
{
/* * * * * * * * * *
* *
* @author wolsh *
* *
* 25 AUG 2009 *
* *
\* * * * * * * * * */
public class NumToStringConverter
{
private static const UNIT_ARRAY :Array = ["", " од", " дв", " три", " четыре", " пять", " шесть", " семь", " восемь", " девять", " десять", " одиннадцать", " двенадцать", " тринадцать", " четырнадцать", " пятнадцать", " шестнадцать", " семнадцать", " восемнадцать", " девятнадцать"];
private static const TEEN_ARRAY :Array = [" двадцать", " тридцать", " сорок", " пятьдесят", " шестьдесят", " семьдесят", " восемьдесят", " девяносто"];
private static const HUND_ARRAY :Array = ["", " сто", " двести", " триста", " четыреста", " пятьсот", " шестьсот", " семьсот", " восемьсот", " девятьсот"];
private static const ORDER_ARRAY :Array = ["", " тысяч", " миллион", " миллиард"];
public static function convertToRussianText(num:Number):String
{
var resultString:String = "";
var resultArray:Array = ["", "", "", ""];
var minus:String = "";
if (num < -999999999999) return "ОШИБКА : число меньше -999999999999";
if (num > 999999999999) return "ОШИБКА : число больше 999999999999";
if (num < 0)
{
minus = "минус ";
num *= -1
}
if (num == 0) return "ноль";
var numParts:Array = new Array();
var i:Number = num;
var d:Number = 0;
var order:Number = 0;
while (i >= 1)
{
d = i;
i = Math.floor(i / 1000);
numParts[order] = d - i * 1000;
order++;
}
for(var g:Number=0; g<order; g++)
{
var hundredString:String = "";
var decimalString:String = "";
var numSuffix:String = "";
var strSuffix:String = "";
var temp:Number = numParts[g];
////
var hundred:Number = Math.floor(temp/100);
if (hundred)
{
temp -= hundred*100;
hundredString = HUND_ARRAY[hundred];
}
var decimal:Number = Math.floor(temp/10);
if (decimal>1)
{
temp -= decimal*10;
decimalString = TEEN_ARRAY[decimal-2];
}
//// cуффикс числа (для 1 и 2)
if (temp == 1 && g != 1) numSuffix = "ин"; // "од^ИН миллион"
if (temp == 1 && g == 1) numSuffix = "на"; // "од^НА тысяча"
if (temp == 2 && g != 1) numSuffix = "а"; // "дв^А миллиона"
if (temp == 2 && g == 1) numSuffix = "е"; // "дв^Е тысячи"
//// суффикс строки порядка
if (g == 1 && temp == 1) strSuffix = "а"; // "1 тысяч^А"
if (g == 1 && temp > 1 && temp < 5) strSuffix = "и"; // "2-4 тысяч^И"
if (g > 1 && temp > 1 && temp < 5) strSuffix = "а"; // "2-4 миллион^А - миллиард^А"
if (g > 1 && temp > 4) strSuffix = "ов"; // "5-9 миллион^ОВ - миллиард^ОВ"
if (g > 1 && temp == 0) strSuffix = "ов"; // "20-100-900 миллион^ОВ - миллиард^ОВ"
resultArray[g] = hundredString
+ decimalString
+ UNIT_ARRAY[temp]
+ numSuffix
+ (numParts[g] == 0 ? "" : ORDER_ARRAY[g] + strSuffix);
}
var rcString:String = resultArray[3]
+ resultArray[2]
+ resultArray[1]
+ resultArray[0];
resultString = rcString.substr(0,1) == " " ? rcString.substring(1) : rcString;
return (minus + resultString);
}
}
}
|