这比这复杂一点,但这是我的代码:
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)
任何想法都会有所帮助。
谢谢,
迦勒
答案 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;