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

C# 将十进制转换为货币并返回,c#,math,currency,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("

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

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个文本框,我希望能够在第1框和第2框中输入一个数字。方框3将方框1和方框2相乘,并将其转换为货币。第四框将取第三框的值,并将其改回十进制,然后乘以一个数字。只要total2没有小数点,我就可以让它工作。如果有一个,它就会失败

该程序基本上是一个收银机程序,您可以将其放入以下程序中:

QTY (box 1)
Amonunt (box 2)
Subtotal (box 3)
Total (box 4)
任何想法都会有帮助

谢谢


Caleb

如果我正确理解了问题,您可以对保存货币值的十进制变量执行操作。通常这意味着保持特定的分辨率(例如小数点后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); 

基本问题是在这一行中混合了十进制和双精度:

total2 = total * 4.2;
total
为十进制,4.2为双精度文本。要编写十进制文字,请使用
m
后缀

total2 = total * 4.2m;

你真的应该给代码中的变量起一个有意义的名字,这不是“生产”的名字。这是我创建的一个只是为了发布。我有一个更容易标注的项目,但这个项目有点基本,只是出于某些原因无法理解,但很难看到是什么,让人们跳过回答你的问题,因为它比平常需要更多的时间。我只是给你一个提示。你忘了说当前程序是如何失败的,以及你在使用什么输入。