بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

افزودن ویرگول برای راحت خواندن عدد

مدیریت گفتگو
MasterSPYware 9 سال پیش
آخرین تغییر: 8 سال پیش

سلام دوستان.
من یه فانکشن نوشتم برای وارد کردن قیمت که برام به حروف نشون میده.

تنها مشکلش اینه که اعداد رو فاصله نمیندازه.

من میخوام وقتی توو input تایپ میکنم 123456789 برام اینطوری نشونش بده 123.456.789
این کد منه:

 <!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>

<div id="conv">
<input id="num" type="text">
<div id="output">حروف</div>
</div>

<script type='text/javascript' src='jquery-3.2.1.js'></script>
<script>

var wordifyfa = function (num, level) {
'use strict';
if (num === null) {
return "";
}
// convert negative number to positive and get wordify value
if (num<0) {
num = num * -1;
return "منفی " + wordifyfa(num, level);
}
if (num === 0) {
if (level === 0) {
return "صفر";
} else {
return "";
}
}
var result = "",
yekan = [" یک ", " دو ", " سه ", " چهار ", " پنج ", " شش ", " هفت ", " هشت ", " نه "],
dahgan = [" بیست ", " سی ", " چهل ", " پنجاه ", " شصت ", " هفتاد ", " هشتاد ", " نود "],
sadgan = [" یکصد ", " دویست ", " سیصد ", " چهارصد ", " پانصد ", " ششصد ", " هفتصد ", " هشتصد ", " نهصد "],
dah = [" ده ", " یازده ", " دوازده ", " سیزده ", " چهارده ", " پانزده ", " شانزده ", " هفده ", " هیجده ", " نوزده "];
if (level > 0) {
result += " و ";
level -= 1;
}

if (num < 10) {
result += yekan[num - 1];
} else if (num < 20) {
result += dah[num - 10];
} else if (num < 100) {
result += dahgan[parseInt(num / 10, 10) - 2] + wordifyfa(num % 10, level + 1);
} else if (num < 1000) {
result += sadgan[parseInt(num / 100, 10) - 1] + wordifyfa(num % 100, level + 1);
} else if (num < 1000000) {
result += wordifyfa(parseInt(num / 1000, 10), level) + " هزار " + wordifyfa(num % 1000, level + 1);
} else if (num < 1000000000) {
result += wordifyfa(parseInt(num / 1000000, 10), level) + " میلیون " + wordifyfa(num % 1000000, level + 1);
} else if (num < 1000000000000) {
result += wordifyfa(parseInt(num / 1000000000, 10), level) + " میلیارد " + wordifyfa(num % 1000000000, level + 1);
} else if (num < 1000000000000000) {
result += wordifyfa(parseInt(num / 1000000000000, 10), level) + " تریلیارد " + wordifyfa(num % 1000000000000, level + 1);
}
return result;

};

var wordifyRials = function (num) {
'use strict';
return wordifyfa(num, 0) + " ریال";
};

var wordifyRialsInTomans = function (num) {
'use strict';
if (num >= 10) {
num = parseInt(num / 10, 10);
} else if (num<=-10) {
num = parseInt(num/10,10);
} else {
num=0;
}

return wordifyfa(num, 0) + " تومان";
};

if (typeof module !== ' ' && module.exports) {
module.exports.wordifyfa = wordifyfa;
module.exports.wordifyRials = wordifyRials;
module.exports.wordifyRialsInTomans = wordifyRialsInTomans;
}

$(document).ready(function() {


$("#num").keydown(function(event) {

// Allow only backspace and delete
if ( event.keyCode == 46 || event.keyCode == 8 ) {
// let it happen, don't do anything
}
else {
// Ensure that it is a number and stop the keypress
if (event.keyCode < 48 || event.keyCode > 57 ) {
event.preventDefault();
}
}

});



$("#num").focusout(function(){
$("#num").val(delimitNumbers($("#num").val()));
});

$("#num").focusin(function(){
$("#num").val( $("#num").val().replace(',', '') );
});


$('#num').on('input',function(e){
$("#num").val( $("#num").val().replace(',', '') );
$("#output").html(wordifyRialsInTomans($("#num").val()));
});



function delimitNumbers(nStr)
{
nStr += '';
x = nStr.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
return x1 + x2;
}




});









</script>

</body>
</html>

حتما نمیخواد با جی کوئری باشه.

من شنیدم با css هم میشه!!!

البته فقط شنیدم.

دوستان راهنمایی بفرماین ممنون میشم

 

نظرات

fandroid 9 سال پیش
سلام دوست عزیز شما داخل همین اسکریپتت یه شرط دیگه هم اضاف کن به این صورت که هر بار باقیمانده تقسیم بر سه رقم ها برابر صفر شده یک ویرگول هم درج کنه بعد برای باقی رقم ها باز از صفر شمارش کنه یعنی مثلا عدد123بعدش یه ویرگول درج کنه سپس flagصفر شه و برای سه رقم بعد هم همینطور الی آخر این راه حلی بود که به ذهنم خورد حالا اگه راه حل بهتریم اومذ به ذهنم میگم دوست عزیز ولی فک کنم همین رو بتونی لابه لای اسکریپتات اعمال کنی :)
RODER 8 سال پیش
من یه همچین فانکشنی با زبان php نوشتم خیلی کوتاه و دقیقه اگه خواستی بگو برات بزارم
RODER 8 سال پیش
من اون فانکشن رو گذاشتم اینجا . یه عدد میگیره و در عوض یک رشته برمیگردونه . اعداد رو سه رقم سه رقم جدا میکنه

پاسخ‌ها 8

MasterSPYware 9 سال پیش

میشه بنویسی برام؟

چون همچین چیزی نوشتم وقتی عددم چهاررقمی شده به حروف دیگه تبدیل نکرد.یعنی اعداد بعد ویرگولو اصلا نخوند

نظرات

fandroid 9 سال پیش
عزیز من تو شرکتم وقت نمیکنم کدش رو بنویسیم ولی سرنخ رو دستتون میدم خب از تابع on جی کوئری استفاده میکنی ؟ هر بار رویدادی رخ داد تعداد ارقام رو بگیر سعی کن آزمون خطا کنی بری جلو از آلرت استفاده کن تکه تکه کدهات رو تست کن
MasterSPYware 9 سال پیش

عیب نداره-هروقت اومدی خونه بفرست

من انقد تست گرفتم ازش خسته شدم

نظرات

MasterSPYware 9 سال پیش

دوست من رسیدی خونه به سلامتی؟

نظرات

fandroid 9 سال پیش

سلام دوست عزیز

ممنون اره خونم ببخشید دیر شد الان خوندم پیامت رو بفرما اینم کد

البته هنوز باید روش کار کنی خواستم سرنخ رو بدم دستت که چطوری باید پیش بری :)

<script>
var virgulCount=0;
$("input#username").keyup(function () {
var inputValue= $("input#username").val();
if((inputValue.length-virgulCount)%3==0&&inputValue.length>=3){
virgulCount++;
inputValue=inputValue+",";
$("input#username").val(inputValue);
}

});
</script>
 

نظرات

h_uk2009 8 سال پیش
بسیار عالی و زیبا من که خیلی لذت بردم
MasterSPYware 9 سال پیش

نه عزیزم

ببین من خودم کد مربوط رو نوشتم.

اما نمیدونم چرا عمل نمیکنه

نظرات

Borhani 9 سال پیش

  php خودش یک تابع دارد که فرمت اش رو تبدیل می کند  بدون هیچ دردسری

اون هم اینه (value$)number_format

نظرات

reza piry ghadim 9 سال پیش

این  تابع ویرگول هاش رو میزاره

 
function format(input){
var nStr = input.value + '';
nStr = nStr.replace( /\,/g, "");
var x = nStr.split( '.' );
var x1 = x[0];
var x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while ( rgx.test(x1) ) {
x1 = x1.replace( rgx, '$1' + ',' + '$2' );
}
input.value = x1 + x2;
}

 

کافیه توی داخل تگ اینپوپ بنویسی :

 
<input name='harchi' onkeyup="format(this)" >

موفق باشید

نظرات

RODER 8 سال پیش

 
function xxx($input){
$output=$input;
if(strlen($input)>3){
$output = "";
$split = str_split($input);
$split=array_reverse($split);
$i=1;
foreach($split as $out){
if($i%3==0) {
$output .= $out . ",";
}else{
$output .= $out;
}
$i++;
}
$output=str_split($output);
$output=array_reverse($output);
$result="";
foreach($output as $out){
$result .= $out;
}
}

if($result[0]==",") {
$result[0] = '';
}

return $result;
}

نظرات


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .