Перевести десятичные в валюту и обратно - PullRequest
0 голосов
/ 22 октября 2011

Это немного сложнее, но это мой код:

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 и 2 и преобразует их в валюту.Box 4 примет значение Box 3s, изменит его обратно на десятичное и умножит число.Я могу заставить это работать, пока у total2 нет десятичного числа.Когда у него есть тот, он потерпит неудачу.

Программа - это, по сути, программа для кассовых аппаратов, в которую вы добавляете следующее:

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

Любые идеи будут полезны.

Спасибо,

Калеб

Ответы [ 2 ]

1 голос
/ 22 октября 2011

Если я правильно понимаю проблему, вы выполняете операции с десятичными переменными, содержащими валютные значения. Часто это означает поддержание определенного разрешения (например, 2 цифры после десятичной точки для центов). Поскольку Десятичное число является типом общего назначения, вам необходимо программно поддерживать требуемое разрешение.

пример:

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); 
0 голосов
/ 22 октября 2011

Основная проблема заключается в том, что вы смешиваете десятичное и двойное в этой строке:

total2 = total * 4.2;

total является десятичным, а 4.2 - двойным литералом.Чтобы написать десятичный литерал, используйте суффикс m.

total2 = total * 4.2m;
...