Jump to content
php.lv forumi

No skaitļa iegūt "Summa vārdiem"


FaLcoN

Recommended Posts

tu gan laikam joko :)

 

raxti katram ciparam kodu

 

$sk = 1245;

if($sk == "1245"){

echo "Tuukstotc divi simti cetrdesmit pieci";

}

 

:)))))

pascal valodaa tas ir iespeejams bet par php nav ne jausmas

Edited by Klez
Link to comment
Share on other sites

Nu es nezinu vai tā būtu gluži pareizi, bet es darītu šādi:

<?
$text = "123,43"
$text = str_replace("1", "viens", $text);
$text = str_replace("2", "divi", $text);
$text = str_replace("3", "trīsi", $text);
$text = str_replace("4", "četrii", $text);
?>
tad noteiktu cik tag ir symboli textā ar strlen()
un atiecīgi ja 3symboli pirms komata  tad smimts ja 4 tad tūlkstoc utt

varbūt tas nav tas gudrakais idejas risinājums, bet tāds ir

Link to comment
Share on other sites

pamatpieeja šamai problēmai ir sadalīt skaitli pēc desmitrangiem:

 

1234 = 1*1000+2*100+3*10+4

 

attiecīgiem skaitļiem 0-9 izvedo masīvu ar nosaukumiem (divi,trīs...)/rangu nosaukumiem (div,četr - priekš + desmit), un pēc tam pieapstrādā dažādus izņēmumums, piem.: 1 pieliekams "tūkstotis","simts" pārējiem - "tūkstoši","simti".

 

attiecīgos rangus var tālāk sadalīt pēc tās pašas sistēmas (xx tūkstoši. xxx tūkstoši).

 

PS>gūglei ir daudz šādu skriptu gan krievu gan citam valodām, tā kā var vienkārši pārtulkot.

Link to comment
Share on other sites

  • 8 years later...

Tā kā latviski forumos jēdzīgu atbildi neatradu šim jautājumam, tad nolēmu pats uzrakstīt skriptiņu, jo pašam savajadzējās, tas gan ir standalone skripts izveidots, kas saņem datus no $_GET parametriem, bet ja nu kādam noder...

<?php
$language['parts'][0] = 'santīmi';
$language['part'][0] = 'santīms';
$language['parts'][2] = 'lati';
$language['part'][2] = 'lats';

$language['parts'][3] = 'tūkstoši';
$language['part'][3] = 'tūkstotis';
$language['parts'][4] = 'miljoni';
$language['part'][4] = 'miljons';
$language['parts'][5] = 'miljardi';
$language['part'][5] = 'miljards';

$language['parts']['hundred'] = 'simti';
$language['part']['hundred']= 'simts';

$language['tens'] = array("Desmit","Divdesmit","Trīsdesmit","Četrdesmit","Piecdesmit","Sešdesmit","Septiņdesmit","Astoņdesmit", "Deviņdesmit");
$language['teens'] = array("Vienpadsmit","Divpadsmit","Trīspadsmit","Četrpadsmit","Piecpadsmit","Sešpadsmit","Septiņpadsmit","Astoņpadsmit", "Deviņpadsmit");
$language['ones'] = array("Viens","Divi","Trīs","Četri","Pieci","Seši","Septiņi","Astoņi", "Deviņi");

$say = '';
$number = $_GET['sum'];

$number = explode('.', $number);

$big = $number[0];
$small = $number[1];

while(strlen($big)){
 $bigs[] = substr($big, -3, 3);
 $big = substr($big, 0, -3);
}
krsort($bigs);

foreach($bigs as $key => $value){
 ptw($value, $key);
}

function ptw($number, $part){
 global $language, $say;

 $teens = false;

 while( strlen($number)<3 )
  $number = ' ' . $number;

 if($number[0]!=' ')
  $say .= $language['ones'][ $number[0]-1 ] . ' ' . $language['parts']['hundred'] . ' ';

 if($number[1]!=' '){
  if($number[1]==1)
   $teens = true;
  else
   $say .= $language['tens'][ $number[1]-1 ] . ' ';
 }

 if($teens)
  $say .= $language['teens'][ $number[2]-1 ] . ' ';
 else
  $say .= $language['ones'][ $number[2]-1 ] . ' ';


 if($number[2]==1 && !$teens)
  $say .= $language['part'][$part+2] . ' ';
 else
  $say .= $language['parts'][$part+2] . ' ';
}

$say .= ', ' . $small . ' ' . $language['parts'][0];

echo mb_substr($say,0,1).mb_strtolower(mb_substr($say,1), 'UTF-8');

Link to comment
Share on other sites

  • 8 months later...

Izmēģināju funkciju, bet tiešām - ļoti nepilnīga :( sorry.

 

Saprotu, ka intelektuālais īpašums un tā ... bet - vai kādam tomēr nav gatava strādājoša funkcija uz šo? 

Vai tiešām to php neviens neizmanto? 

 

PEAR neder, jo ne vienmēr uz servera ir supports.

 

 

Link to comment
Share on other sites

https://github.com/jurchiks/numbers2words

Rakstīju ļoti sen, kad tikko sāku programmēt PHP, bet šis tika izmantots kredītu rēķinos sohocredit.lv (latviski, krieviski, lietuviski, angliski, spāniski - nācās mācīties skaitīt spāniski :D). Priekš summām zem 100k pietika.

Derētu uzprišināt kodu, tagad lasu un izskatās bik nesmuki. Bet nu to jau kādu citu dienu.

 

+ doma kaut kad piepliķēt klāt vēl citas valodas, tad jau redzēs.

Edited by jurchiks
Link to comment
Share on other sites

Šo vakar izmēģināju. Taču kaut kas 'baigi nestrādāja'. Šodien tomēr palaidu vēlreiz ar testiem un izskatās, ka ir ok. Tikai jāintegrē.

 

Par šo es Tev galvenos 2 issue nopostēju githubā.

Varētu attīstīt līdz vienam perfektam :)

 

Paldies par abiem!

Link to comment
Share on other sites

Jopt, tu issues manā kodā iepostēji tā otra projekta bugtrackerī...

Anyway, rīt paskatīšos, kas un kā.

 

P.S. es toreiz naudas summu izvadīšanai izmantoju "Ls" un "sant", tad nebija jāuztraucās par viensk./daudzsk. formām.

Edited by jurchiks
Link to comment
Share on other sites

  • 3 months later...

http://www.php.net/manual/en/class.numberformatter.php
Mēģināju nesen darbā šo piekurbulēt, kaut kā nesanāca, kaut gan PHP 5.5.4 stāv uz kastes un intl extension ir ieslēgts.
Pievērsiet uzmanību pašam apakšējam komentāram:

<?php
$f = new NumberFormatter("en", NumberFormatter::SPELLOUT);
echo $f->format(123456);
?>

Produces the result:
one hundred twenty-three thousand four hundred fifty-six

Iespējams, ka tā padarīšana spēj arī citās valodās to izdarīt, bet, kā jau minēju, man neizdevās pat palaist...

Link to comment
Share on other sites

1. Šādu scriptu izveidot tev pašam prasīs ne vairāk ka 15minūtes.

2. Manuprāt vienīgais iemesls šo topiku kustināt ir tikai tad, ja esi izveidojis modifikāciju priekš eiro ar pāriešanas datumiem, kursa starpībām utt.

Link to comment
Share on other sites

×
×
  • Create New...