PDA

View Full Version : تغییر عدد به فرمت پول مثلا 1000 به 1,000



moslem.hady
شنبه 15 مرداد 1390, 12:40 عصر
با سلام.
تغییر عدد به فرمت پول رو میخوام.
مثلا 12000 به 12,000
یا 10000000 به 10,000,000
کسی ایده ای داره؟!
مرسی

k_ce_esf
شنبه 15 مرداد 1390, 12:49 عصر
اگه مثلا میخواین در سطر و ستونی از GridView که این مقدار قرار میگیره رقم ها 3 تا 3 تا جدا شن از کد زیر میشه استفاده کرد:


dgv1.Rows[1].Cells[1].Value =string.Format("{0:###,###.####}", 0);

moslem.hady
شنبه 15 مرداد 1390, 13:06 عصر
نه.خارج از گرید میخوام.
پارامترهای این تابع چطوریه؟! ینی اگه بخوام رشته str رو تبدیل کنم چطوری پارامتر بدم؟

mandanim
شنبه 15 مرداد 1390, 13:27 عصر
نمی خواهی از این روش استفاده کنی
از طول رشته شد 4 تا بعد از اولی یک ویلگول
اگه شد7 تا بعد از 4 یک ویلگول و ...

k_ce_esf
شنبه 15 مرداد 1390, 13:30 عصر
نه.خارج از گرید میخوام.
پارامترهای این تابع چطوریه؟! ینی اگه بخوام رشته str رو تبدیل کنم چطوری پارامتر بدم؟

من یه مثال زدم فقط،هرجایی که بخواین استفاده کنین مثل همین فرمت را داره:
چند تا مثال دیگه میزنم که بیشتر متوجه شین


//if input is int
int a=1000000;
textBox1.Text = a.ToString("###,###.#####");
//or
textBox2.Text = string.Format("{0:###,###.####}", a);
//if input is string
string str = "200000";
textBox3.Text = string.Format("{0:###,###.####}", Convert.ToInt32(str));

moslem.hady
شنبه 15 مرداد 1390, 16:22 عصر
نمی خواهی از این روش استفاده کنی
از طول رشته شد 4 تا بعد از اولی یک ویلگول
اگه شد7 تا بعد از 4 یک ویلگول و ...
این روش نمیشه. چون رشته از چپ به راسته ولی عدد باید از راست به چپ ویرگول گذاری بشه.

از تابعی که دوستمون گفتن استفاده کردم.
textBox2.Text = string.Format("{0:###,###.####}", a);

mmd2009
شنبه 15 مرداد 1390, 18:59 عصر
با سلام

از این متد هم میتونید استفاده بکنید :


private string MoneyTextBox(Int64 Numeric)
{
return (Numeric.ToString("N0", new NumberFormatInfo()
{
NumberGroupSizes = new[] { 3 },
NumberGroupSeparator = "."
}));
}

faravaghi
یک شنبه 16 مرداد 1390, 02:49 صبح
سلام،
اینم یه روشه که مثلا در رویداد KeyUp تکس باکس ازش استفاده کنی که اگه کاربر وارد کرد مثلا 1000 اتومات با هر بار تایپ عدد خودش به صورت خودکار بیاد اعشار رو بزاره:


ChangeTxtFormat(textbox1);

protected internal string MoneyFormat(long Money)
{
string ResultMoney = "";
long Mod = 0, Div = 0;

try
{
if (Money <= 0)
return "0";
else if (Money < 1000)
{
return Money.ToString();
}
else
{
do
{
Mod = Money % 1000;
Div = Money / 1000;

if (Mod.ToString().Length == 1)
ResultMoney = ",00" + Mod.ToString() + ResultMoney;
else if (Mod.ToString().Length == 2)
ResultMoney =",0" + Mod.ToString() + ResultMoney;
else
ResultMoney = "," + Mod.ToString() + ResultMoney;

Money /= 1000;
} while (Div >= 1000 || Div < 0);
ResultMoney = Div.ToString() + ResultMoney;
if (ResultMoney[0] == ',')
{
ResultMoney = ResultMoney.Substring(1);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return ResultMoney;
}

protected internal string MoneyFormat(string StrMoney)
{

string ResultMoney = "";
long Money = 0, Mod = 0, Div = 0;

Money = Convert.ToInt64(Convert.ToDouble(StrMoney));

try
{
if (Money <= 0)
return "0";
else if (Money < 1000)
{
return Money.ToString();
}
else
{
do
{
Mod = Money % 1000;
Div = Money / 1000;

if (Mod.ToString().Length == 1)
ResultMoney = ",00" + Mod.ToString() + ResultMoney;
else if (Mod.ToString().Length == 2)
ResultMoney =",0" + Mod.ToString() + ResultMoney;
else
ResultMoney = "," + Mod.ToString() + ResultMoney;

Money /= 1000;
} while (Div > 1000 || Div < 0);
ResultMoney = Div.ToString() + ResultMoney;
if (ResultMoney[0] == ',')
{
ResultMoney = ResultMoney.Substring(1);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return ResultMoney;
}

protected internal void ChangeTxtFormat(TextBox YourTextBox)
{
try
{
if (YourTextBox.Text.Length > 3)
{
double Payment = Convert.ToDouble(YourTextBox.Text);
YourTextBox.Text = MoneyFormat(Convert.ToInt64(Payment));
YourTextBox.SelectionStart = YourTextBox.Text.Length;
}
}
catch { }
}

اگه خواستی متن TextBox رو به عدد تبدیل کنی از این روش استفاده کن :

double Payment = Convert.ToDouble(YourTextBox.Text);

RAHA_AVA
یک شنبه 25 تیر 1391, 17:29 عصر
سلام،
اینم یه روشه که مثلا در رویداد KeyUp تکس باکس ازش استفاده کنی که اگه کاربر وارد کرد مثلا 1000 اتومات با هر بار تایپ عدد خودش به صورت خودکار بیاد اعشار رو بزاره:


ChangeTxtFormat(textbox1);

protected internal string MoneyFormat(long Money)
{
string ResultMoney = "";
long Mod = 0, Div = 0;

try
{
if (Money <= 0)
return "0";
else if (Money < 1000)
{
return Money.ToString();
}
else
{
do
{
Mod = Money % 1000;
Div = Money / 1000;

if (Mod.ToString().Length == 1)
ResultMoney = ",00" + Mod.ToString() + ResultMoney;
else if (Mod.ToString().Length == 2)
ResultMoney =",0" + Mod.ToString() + ResultMoney;
else
ResultMoney = "," + Mod.ToString() + ResultMoney;

Money /= 1000;
} while (Div >= 1000 || Div < 0);
ResultMoney = Div.ToString() + ResultMoney;
if (ResultMoney[0] == ',')
{
ResultMoney = ResultMoney.Substring(1);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return ResultMoney;
}

protected internal string MoneyFormat(string StrMoney)
{

string ResultMoney = "";
long Money = 0, Mod = 0, Div = 0;

Money = Convert.ToInt64(Convert.ToDouble(StrMoney));

try
{
if (Money <= 0)
return "0";
else if (Money < 1000)
{
return Money.ToString();
}
else
{
do
{
Mod = Money % 1000;
Div = Money / 1000;

if (Mod.ToString().Length == 1)
ResultMoney = ",00" + Mod.ToString() + ResultMoney;
else if (Mod.ToString().Length == 2)
ResultMoney =",0" + Mod.ToString() + ResultMoney;
else
ResultMoney = "," + Mod.ToString() + ResultMoney;

Money /= 1000;
} while (Div > 1000 || Div < 0);
ResultMoney = Div.ToString() + ResultMoney;
if (ResultMoney[0] == ',')
{
ResultMoney = ResultMoney.Substring(1);
}
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
return ResultMoney;
}

protected internal void ChangeTxtFormat(TextBox YourTextBox)
{
try
{
if (YourTextBox.Text.Length > 3)
{
double Payment = Convert.ToDouble(YourTextBox.Text);
YourTextBox.Text = MoneyFormat(Convert.ToInt64(Payment));
YourTextBox.SelectionStart = YourTextBox.Text.Length;
}
}
catch { }
}

اگه خواستی متن TextBox رو به عدد تبدیل کنی از این روش استفاده کن :

double Payment = Convert.ToDouble(YourTextBox.Text);



من این تابع رو اضافه کردم به فرمم و اینجوریم فراخونیش کردم

private void txtbime_TextChanged(object sender, EventArgs e)
{
MoneyFormat(txtbime.Text);
}


ولی وقتی عدد وارد میکنم هیچ کاری نمیکنه.من میخوام عدد میزنم تو تکس باکس سه رقم سه رقم جدا کنه عددو ریالو اینا نمیخوام باشه کنارش فقط همون موقع که تایپ میشه جدا بشه چیکار باید کنم؟!

RAHA_AVA
یک شنبه 25 تیر 1391, 18:17 عصر
من وقتم کمه خواهشا راهنمایی کنید:ناراحت:

uniqueboy_ara
یک شنبه 25 تیر 1391, 18:45 عصر
این همه درد سر نمیخواد که
به همین راحتی میتونی به نتیجه برسی:
txtNumber.Text = (1000000).ToString("N0");

uniqueboy_ara
یک شنبه 25 تیر 1391, 19:17 عصر
میتونی از این کلاس هم استفاده کنی:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Phone_BOOK // با توجه به پروژه خودتون باید این قسمت رو تنظیم کنید
{
class txtMoneyStyle:TextBox
{

private bool _Value = true;


protected override void OnLeave(EventArgs e)
{
long Digit;
if (_Value)
{
Int64.TryParse(Text, out Digit);
Text = (Digit).ToString("N0");
}
}

public bool MonyStyle
{
get
{
return _Value;
}
set
{
_Value = value;
}
}
}
}

RAHA_AVA
یک شنبه 25 تیر 1391, 21:23 عصر
ممنون دوستان فقط من اینارو تو کدوم رویداد فراخونی کنم که موقع تایپ جداکنندرو بندازه؟تکس چنج؟

uniqueboy_ara
یک شنبه 25 تیر 1391, 21:29 عصر
اولی رو میتونی با کمی تغییر تو رویداد KeyUp تکست باکس بنویسی
دومی خودش یه UserControl هستش، و با اضافه کردنش به پروژه یه ابزار با عنوان txtMoneyStyle به جعبه ابزار اضافه میشه که شما میتونید توی مشخصاتش، مقدار MoneyStyle رو برابر true قرار بدید، به این ترتیب، بعد از تایپ عدد مورد نظر و ترک کردن این کنترل، عددتون به فرم مورد نظر تبدیل میشه!

RAHA_AVA
یک شنبه 25 تیر 1391, 23:03 عصر
مرسی کد اول خوبه ولی فقط 1000000 قبول میکنه من میخوام هر عددی مینویسم اینجوری شه
کلاسه شمام که اضافه نکد به تول باکسم
ممنون میشم اولیو برای همه اعداد تغییر بدین

RAHA_AVA
یک شنبه 25 تیر 1391, 23:10 عصر
من یه مثال زدم فقط،هرجایی که بخواین استفاده کنین مثل همین فرمت را داره:
چند تا مثال دیگه میزنم که بیشتر متوجه شین


//if input is int
int a=1000000;
textBox1.Text = a.ToString("###,###.#####");
//or
textBox2.Text = string.Format("{0:###,###.####}", a);
//if input is string
string str = "200000";
textBox3.Text = string.Format("{0:###,###.####}", Convert.ToInt32(str));


چرا فقط تا 1000 جواب میده این؟!

uniqueboy_ara
یک شنبه 25 تیر 1391, 23:20 عصر
خانوم مهندس، مگه میشه فقط واسه یه عدد جواب بده؟؟؟
احتمالا عددتون از رنج Int خارج شده، از int64 استفاده کنید باید درست بشه! --- http://up.vatandownload.com/images/gb0oxuzr7uaq70wu07e.jpg

uniqueboy_ara
دوشنبه 26 تیر 1391, 00:25 صبح
از این استفاده کن
فایل dll ضمیمه رو به Tool Box اضافه کن و از textbox داخلش استفاده کن :)
یه خاصیت Money Style داره که میتونی خاموش و روشنش کنی و یه خاصیت فقط خواندنی با عنوان Digit داره که عدد داخل TextBox رو بدون جدا کننده ها بهتون میده
اینم کد مربوطه:
using System;
using System.Text;
using System.Windows.Forms;
namespace txtMoneyStyle
{
public class MoneyStyle: TextBox
{


private bool _Value = true;


protected override void OnLeave(EventArgs e)
{
long Digit;
if (_Value)
{
Int64.TryParse(Text, out Digit);
Text = (Digit).ToString("N0");
}
}

public bool MonyStyle
{
get
{
return _Value;
}
set
{
if (value==true)

_Value = value;
else

_Value = value;
}
}

public long Digit
{
get
{
string[] numbers = Text.Split(',');
long number;
StringBuilder sb=new StringBuilder();
for (int i = 0; i < numbers.Length; i++)
{
sb.Append(numbers[i]);
}

Int64.TryParse(sb.ToString(), out number);
sb = null;
return number;
}

}
}
}

RAHA_AVA
دوشنبه 26 تیر 1391, 23:00 عصر
ممنون آقایه مهندس:تشویق:

omidamiry
جمعه 27 مرداد 1391, 18:44 عصر
ای بابا چقدر سخت گرفتید

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

sum=100000000;
textbox1.text=sum.tostring("#,0").
همین

sinaprog
جمعه 27 مرداد 1391, 19:42 عصر
سلام من مبتدیم
ولی این برنامه رو همینطوری نوشتم شاید به درد خورد