Имя пользователя:
Пароль:
 

Название темы: Перевод числа в пропись
Показать сообщение отдельно

Аватара для Creat0R

Must AutoIt


Сообщения: 3054
Благодарности: 1009

Профиль | Сайт | Отправить PM | Цитировать


Цитата Iska:
проще будет взять любой из работоспособных макросов «число|сумма прописью VBA» и переложить его с VBA на AutoIt »
Переделал вроде:

Код: Выделить весь код
ConsoleWrite(IntToWords(123))

Func ShortNum($num, $razr)
	Dim $hundreds, $tens, $ones, $razryad
	Dim $hundreds[10] = ["", " сто", " двести", " триста", " четыреста", " пятьсот", " шестьсот", " семьсот", " восемьсот", " девятьсот"]
	Dim $tens[10] = ["", "", " двадцать", " тридцать", " сорок", " пятьдесят", " шестьдесят", " семьдесят", " восемьдесят", " девяносто"]
	Dim $ones[20] = ["", "", "", " три", " четыре", " пять", " шесть", " семь", " восемь", " девять", " десять", " одиннадцать", " двенадцать", " тринадцать", " четырнадцать", " пятнадцать", " шестнадцать", " семнадцать", " восемнадцать", " девятнадцать"]
	Dim $razryad[7] = ["", " тысяч", " миллион", " миллиард", " триллион", " квадриллион", " квинтиллион"]
	
	Dim $t, $o
	
	$result = $hundreds[$num / 100]
	
	If $num = 0 Then Return
	
	$t = Mod($num, 100) / 10
	$o = Mod($num, 10)
	
	If $t <> 1 Then
		$result &= $tens[$t]
		
		Switch $o
			Case 1
				If $razr = 1 Then
					$result &= " одна"
				Else
					$result &= " один"
				EndIf
			Case 2
				If $razr = 1 Then
					$result &= " две"
				Else
					$result &= " два"
				EndIf
			Case 3, 4, 5, 6, 7, 8, 9
				$result &= $ones[$o]
		EndSwitch
		
		$result &= $razryad[$razr]
		
		Switch $o
			Case 1
				If $razr = 1 Then
					$result &= "а"
				EndIf
			Case 2, 3, 4
				If $razr = 1 Then
					$result &= "и"
				ElseIf $razr > 1 Then
					$result &= "а"
				EndIf
			Case Else
				If ($razr > 1) Then
					$result &= "ов"
				EndIf
		EndSwitch
		
	Else
		$result &= $ones[Mod($num, 100)]
		$result &= $razryad[$razr]
		
		If $razr > 1 Then
			$result &= "ов"
		EndIf
	EndIf
	
	Return $result
EndFunc

Func IntToWords($s)
	Dim $i, $count
	
	If (StringLen($s) = 0) Or ($s = "0") Then
		Return "ноль"
	EndIf
	
	$count = (StringLen($s) + 2) / 3
	
	If $count > 7 Then
		Return "Value is too large"
	EndIf
	
	$result = ""
	
	For $i = 1 To $count
		$result = ShortNum((StringMid($s, StringLen($s) - 3 * $i + 1, 3)), $i - 1) & $result
	Next
	
	If StringLen($result) > 0 Then
		$result = StringRight($result, StringLen($result) - 1)
	EndIf
	
	If $result = "" Then $result = $s
	
	Return $result
EndFunc
Но есть многие недоработки.

-------
“Сделай так просто, как возможно, но не проще этого.”... “Ты никогда не решишь проблему, если будешь думать так же, как те, кто её создал.”

Альберт Эйнштейн

P.S «Не оказываю техподдержку через ПМ/ICQ, и по email - для этого есть форум. ©»

http://creator-lab.ucoz.ru/Images/Icons/autoit_icon.png Русское сообщество AutoIt | http://creator-lab.ucoz.ru/Images/Ic...eator_icon.png CreatoR's Lab | http://creator-lab.ucoz.ru/Images/Icons/oac_icon.png Opera AC Community


Отправлено: 16:51, 16-04-2012 | #6

Название темы: Перевод числа в пропись