PDA

View Full Version : روشی برای تبدیل خودکار اعداد به حروف



navid3d_69
پنج شنبه 09 آذر 1391, 05:18 صبح
سلام کسی روشی بلد هست که بشه مقدار عددی داد و حروفی آن رو برگردونه مثلا
این 2796450 رو بدین و مقدار دو میلیون و هفتصد و ..... رو برگردونه ؟

azowghi
پنج شنبه 09 آذر 1391, 21:32 عصر
سلام دوست عزیز

بایست یه الگوریتم براش بنویسی
ولی کار جالبی در میاد چیزی که الان به نظرم میرسه
اینه که اول طول عدد رو بدست بیاری بعدش از روی طول عدد بفهمی مثلا میلیونه یا هزار ....

یا علی

MMSHFE
جمعه 10 آذر 1391, 00:23 صبح
<?php
function numalpha($num) {
$one = array('صفر', 'یک', 'دو', 'سه', 'چهار', 'پنج', 'شش', 'هفت', 'هشت', 'نه');
$ten = array('', 'ده', 'بیست', 'سی', 'چهل', 'پنجاه', 'شصت', 'هفتاد', 'هشتاد', 'نود');
$hundred = array('', 'یکصد', 'دویست', 'سیصد', 'چهارصد', 'پانصد', 'ششصد', 'هفتصد', 'هشتصد', 'نهصد');
$exceptions = array('', 'یازده', 'دوازده', 'سیزده', 'چهارده', 'پانزده', 'شانزده', 'هفده', 'هجده', 'نوزده');
$units = array('', 'هزار', 'میلیون', 'میلیارد');
$separator = ' و ';

if(strlen($num) > count($units) * 3){
return 'عدد واردشده بیشتر از حداکثر محدوده مجاز است';
}

$num = (string) (float) $num;
$num_len = strlen($num);
$result = '';

for($i = $num_len - 1; $i >= 0; $i -= 3) {
$i_one = (int) isset($num[$i]) ? $num[$i] : -1;
$i_ten = (int) isset($num[$i - 1]) ? $num[$i - 1] : -1;
$i_hundred = (int) isset($num[$i - 2]) ? $num[$i - 2] : -1;

$isset_one = false;
$isset_ten = false;
$isset_hundred = false;

$letters = '';

// zero
if($i_one == 0 && $i_ten < 0 && $i_hundred < 0) {
$letters = $one[$i_one];
}

// one
if(($i >= 0) && $i_one > 0 && $i_ten != 1 && isset($one[$i_one])){
$letters = $one[$i_one];
$isset_one = true;
}

// ten
if(($i-1 >= 0) && $i_ten > 0 && isset($ten[$i_ten])) {
if($isset_one) {
$letters = $separator . $letters;
}

if($i_one == 0) {
$letters = $ten[$i_ten];
}
elseif($i_ten == 1 && $i_one > 0) {
$letters = $exceptions[$i_one];
}
else {
$letters = $ten[$i_ten] . $letters;
}

$isset_ten = true;
}

// hundred
if(($i-2 >= 0) && $i_hundred > 0 && isset($hundred[$i_hundred])) {
if($isset_ten || $isset_one){
$letters = $separator . $letters;
}

$letters = $hundred[$i_hundred] . $letters;
$isset_hundred = true;
}

if($i_one < 1 && $i_ten < 1 && $i_hundred < 1){
$letters = '';
}
else {
$letters .= ' ' . $units[($num_len - $i - 1) / 3];
}

if(!empty($letters) && $i >= 3) {
$letters = $separator . $letters;
}

$result = $letters . $result;
}

return $result;
}
?>
<!doctype html>
<html dir="rtl">
<head>
<title>تبدیل عدد به حروف</title>
<meta charset="utf-8"/>
</head>
<body>
<form action="" method="get">
<label>عدد موردنظر را وارد کنید: <input name="num" type="text" value="<?php echo (isset($_GET['num']) ? htmlentities($_GET['num'], ENT_QUOTES, 'utf-8') : '0'); ?>"/></label>
<input type="submit" value="تبدیل"/>
<style type="text/css">
* {
font-family: Tahoma;
font-size: 10pt;
}
</style>
</form>
<?php
$num = (isset($_GET['num']) && is_numeric($_GET['num']) ? (float) $_GET['num'] : 0);
echo '<p>عدد وارد شده: <b>' . numalpha($num) . '</b></p>' . PHP_EOL;
?>
</body>
</html>
اگه اعداد بزرگتر رو میخواین، کافیه آرایه units$ رو افزایش بدین. مثلاً یک اندیس دیگه با مقدار 'تریلیارد' بهش اضافه کنید تا اعداد رو تا محدوده 15 رقم هم بتونه محاسبه کنه. اگه سؤالی بود در خدمتم.

javid7
پنج شنبه 26 دی 1392, 18:35 عصر
تشکر
ببخشید اگر بخواهیم همین کار رو برای دو text box انجام بدیم چه طوری میشه ؟
مثلاً کاربر در داخل تکست باکس اول عدد رو میزنه ، و بعد از ترک کردن تکست باکس به صورت خودکار حروف فارسی در داخل تکست باکس دوم نمایش بده
ممنونم

فرزند کوروش
پنج شنبه 26 دی 1392, 19:02 عصر
باید از جی کوئری استفاده کنی

javid7
جمعه 27 دی 1392, 18:31 عصر
بلد نیستم
میدونم همتون به جهت حرفه ای بودن راه حل میدید اما بلد نیستم :افسرده:
اگر میشه کدش رو برام بزارید :خجالت: ببخشید

MMSHFE
جمعه 27 دی 1392, 21:03 عصر
بحث سر حرفه ای بودن نیست. مهم هدف این سایته که ارائه کد آماده نیست. قراره راهنمایی کنیم خودتون انجام بدین. اینکه در بعضی جاها میبینید نمونه کد ارائه میشه هم بخاطر اینه که برخی جاها ده خط نمونه کد بهتر از 1000 خط توضیحات جواب میده ولی همه جا نمونه کد ارائه میشه نه کد Final یعنی همه نمونه کدها برحسب نیاز در پروژه باید Customize بشن. درمورد مشکل شما هم چون مربوط به Javascript میشه، باید در تالار Javascript یا jQuery مطرح کنید.