| Словом (изписване на число с думи) - PHP |
| Автор |
Bibi (20.04.2008 18:54) |
 |
съобщение до автора |
|
| Погледнат |
886 пъти |
 |
добави към любими |
|
| Оценка |
 |
 |
добави коментар |
|
| Гласове |
1 |
 |
изпрати на приятел |
|
| Коментари |
(0) |
 |
абонирай се за PHP |
|
|
|
|
|
|
|
| |
|
Този скрипт изисква php 5.
Примерната функция inWord() проверява за коректност на данните и генерира стринг за левове и стотинки:
CODE1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
| <?php
function inWord($number) {
$number = str_replace(' ','',$number);
if ( !preg_match('/^[-+]?[0-9]*\.?[0-9]*$/', $number) ) {
throw new Exception('not a number',1); }
$res = '';
if (substr($number, 0, 1) == '-' ) {
$res = 'минус ';
$number = substr($number, 1);
}
$parts = preg_split('/[.,]/',$number);
if (strlen($parts[0]) > 12 ) {
throw new Exception('too big',2); }
$lv = $parts[0];
$st = 0;
if (array_key_exists(1, $parts)) {
$flval = floatval(substr('0.'.$parts[1], 0, 5));
$st = round($flval*100) % 100;
$st = strval($st);
}
if ($lv != 0) {
$res .= toSlovom($lv, 'male') .'лв.';
}
if ($st != 0) {
if ($res != '') $res .= ' и ';
$res .= toSlovom($st, 'female') .'ст.';
}
if ($res == '') $res = 'нула лв.';
return $res;
}
?> |
Скрипта:
CODE1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
| <?php
function toSlovom($num, $Gender) {
$TempGender = Array($Gender,'female','male','male');
$mantisi = Array(Array('','хиляди ','милиона ','милиарда '),
Array('','хилядa ','милион ','милиард '));
$in_pos = 0;
$Result = '';
$s = strval($num);
$len = intval((strlen($s) + 2)/3);
$s = str_pad($s, 3*$len, '0', STR_PAD_LEFT);
$gr = str_split($s, 3); for ($i = 0; $i < $len; $i++) {
$j = $len - 1 - $i;
if ($gr[$i] != '000') {
if ($j == 1 && $gr[$i] == '001') { $ss = '';
} else {
$ss = convert($gr[$i], $TempGender[$j]);
}
if ($gr[$i] == '001') $pl = 1; else $pl = 0;
$ss .= $mantisi[$pl][$j];
if (strpos($ss, ' и ') === false) $in_pos = strlen($Result); else $in_pos = 0;
$Result .= $ss;
}
}
if ($in_pos != 0) {
$Result = substr_replace($Result, 'и ', $in_pos, 0);
}
return $Result;
}
function convert($in_s, $Gender) {
$stotici = Array('','сто ','двеста ','триста ');
$desetici = Array('десет ','единадесет ','дванадесет ');
$edinici = Array('','едно','две','три','четири','пет','шест','седем','осем','девет');
if ($Gender == 'male') {
$edinici[1] = 'един'; $edinici[2] = 'два';
} else if ($Gender == 'female') {
$edinici[1] = 'една';
}
$c = str_split($in_s); $Result = '';
if ($c[0] > 0 && $c[0] <= 3) $Result = $stotici[$c[0]];
else if ($c[0] > 3) $Result = $edinici[$c[0]] .'стотин ';
if ($c[1] == 1) {
if ($Result != '') $Result .= 'и ';
if ($c[2] >= 0 && $c[2] <= 2) $Result .= $desetici[$c[2]];
else $Result .= $edinici[$c[2]] .'надесет ';
}
else {
if ($c[1] > 1) {
if ($Result != '' && $c[2] == 0 ) $Result .= 'и ';
if ($c[1] == 2) $Result .= 'двадесет ';
else $Result .= $edinici[$c[1]] .'десет ';
}
if ($c[2] != 0) {
if ($Result != '') $Result .= 'и ';
$Result .= $edinici[$c[2]] .' ';
}
}
return $Result;
}
?> |
Ето как може да се тества:
CODE1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=windows-1251">
</head>
<body>
<?php
$err = Array(1=>'не е число!', 2=>'- много голямо!');
$number = $_GET['n'];
try {
echo '<i>'. inWord($number) .'</i>';
}
catch (Exception $e) {
$trc = $e->getTrace();
echo '<b>'.$trc[0]['args'][0].'</b> '.$err[$e->getCode()];
}
?>
</body>
</html> |
За да сработи в php4, трябва да се махнат ексепшъните и освен това str_split() да се замени с някаква подходяща функция, примерно:
CODE1
2
3
4
5
6
7
| <?php
function splitstring($string, $len=1) {
for ($i = 0; $i < ceil(strlen($string)/$len); $i++)
$rtnarr[$i] = substr($string, $len*$i, $len);
return($rtnarr);
}
?> |
| 1 посетител чете този скрипт (0 потребители и 1 гост) |
|
|
Активни потребители:
---
|
| |
|
|