将十进制转换为货币并返回

时间:2011-10-22 18:07:03

标签: c# math currency

这比这复杂一点,但这是我的代码:

private void button1_Click(object sender, EventArgs e)
{
    Decimal num1 = Convert.ToDecimal(textBox1.Text);
    Decimal num2 = Convert.ToDecimal(textBox2.Text);

    Decimal total = num1 + num2;

    textBox3.Text = total.ToString("C");

    Decimal total2 = Convert.ToDecimal(total);

    total2 = total * 4.2;

    textBox4.Text = Convert.ToString(total2);

基本上是这样的:我有4个文本框,我希望能够在box1和box2中输入一个数字。方框3将乘以方框1和1。 2并将其转换为货币。第四个框将获取Box 3s值并将其更改为十进制并乘以一个数字。只要total2没有小数,我就能让它工作。当它有一个它会失败。

该程序基本上是一个收银机程序,您可以在下面添加:

QTY (box 1)
Amonunt (box 2)
Subtotal (box 3)
Total (box 4)

任何想法都会有所帮助。

谢谢,

迦勒

2 个答案:

答案 0 :(得分:1)

如果我正确理解了问题,则对包含货币值的十进制变量执行操作。通常它意味着保持特定的分辨率(例如,小数点后2位数)。由于 Decimal 是一种通用类型,因此您需要以编程方式维护所需的分辨率。

示例:

static Decimal  RoundToCents(Decimal value)
{
   return Math.Round(value, 2, MidpointRounding.AwayFromZero);
}


Decimal num1 = RoundToCents(Convert.ToDecimal(textBox1.Text)); 
Decimal num2 = RoundToCents(Convert.ToDecimal(textBox2.Text)); 

Decimal total = num1 + num2; // no rounding is needed for additions and subtractions
Decimal total2 = RoundToCents(total * 4.2m); 

答案 1 :(得分:0)

根本问题在于你在这一行中混合使用decimal和double:

total2 = total * 4.2;

total是十进制,4.2是双字面值。要编写十进制文字,请使用m后缀。

total2 = total * 4.2m;