Нужна помощь в логике BAL Class - PullRequest
1 голос
/ 02 февраля 2010

В моем программном обеспечении для продаж я хочу рассчитать TotalCost, Discount, NettotalCost. После ввода Quanity и rate из текстового поля все значения должны быть заполнены автоматически. В моей программе он может показывать TotalCost и NetTotal, но не показывает значение скидки, всегда показывает только 0. Вот мой код, пожалуйста, кто-нибудь изменить его, что здесь не так ...

public class SalesEntity
{
    private string custid;
    private string custname;
    private string productname;
    private int quantity;
    private float rate;
    private float total;
    private float discount;
    private float NetTotal;

    public string CUSTOMERID
    {
        get
        {
            return custid;
        }
        set
        {
            custid = value;
        }
    }
    public string CUSTOMERNAME
    {
        get
        {
            return custname;
        }
        set
        {
            custname = value;
        }
    }
    public string PRODUCTNAME
    {
        get
        {
            return productname;
        }
        set
        {
            productname = value;
        }
    }
    public int QUANTITY
    {
        get
        {
            return quantity;
        }
        set
        {
            quantity = value;
        }
    }
    public float RATE
    {
        get
        {
            return rate;
        }
        set
        {
            rate = value;
        }
    }
    public float TOTAL
    {
        get
        {
            return total;
        }
        set
        {
            total = value; ;

        }
    }
    public float DISCOUNT
    {
        get
        {
            return discount;
        }
        set
        {
            discount = value;
        }
    }
    public float NETTOTAL
    {
        get
        {            
            return NetTotal;
        }
        set
        {
            NetTotal = value;
        }
    }
}
public class SalesBALManager
{  
    public SalesEntity Compute(SalesEntity salesEntity)
    {
        salesEntity.TOTAL = salesEntity.QUANTITY * salesEntity.RATE;
        salesEntity.DISCOUNT = (10 / 100 * salesEntity.TOTAL);
        salesEntity.NETTOTAL = salesEntity.TOTAL - salesEntity.DISCOUNT;
        return salesEntity;

    }
}
protected void TxtRate_TextChanged(object sender, EventArgs e)
    {
        if (Page.IsPostBack)
        {
            SalesBALManager obj = new SalesBALManager();
            SalesEntity salesentity = new SalesEntity();

            salesentity.QUANTITY = Convert.ToInt32(TxtQuantity.Text);
            salesentity.RATE = Convert.ToInt32(TxtRate.Text);
            salesentity.CUSTOMERID = TxtCustId.Text;
            salesentity.CUSTOMERNAME = TxtCustName.Text;

            salesentity = obj.Compute(salesentity);

            TxtTotal.Text = salesentity.TOTAL.ToString();
            TxtDiscount.Text = salesentity.DISCOUNT.ToString();            
            TxtNetTotal.Text = salesentity.NETTOTAL.ToString();
        }

    }

Ответы [ 3 ]

2 голосов
/ 02 февраля 2010

У вас есть как минимум две проблемы. Во-первых, вы используете числа с плавающей запятой, когда вы должны использовать десятичное число, а во-вторых, вы используете целочисленную арифметику при делении 10 / 100. Результат этого равен нулю при использовании целочисленной арифметики. Я бы изменил числа с плавающей запятой на десятичные и указал бы 0.1M вместо 10/100. Я также был бы более осторожен с моими строковыми форматами, чтобы число десятичных знаков в десятичных числах было фиксированным, например, discount.ToString( "0.00" ).

1 голос
/ 02 февраля 2010

10/100 - целочисленное деление, которое возвращает целое число 0. Используйте их как числа с плавающей точкой, чтобы выполнить деление числа с плавающей точкой.

((float)10/(float)100)
1 голос
/ 02 февраля 2010

Подозреваю, что 10 / 100 рассчитывается с использованием целочисленного деления, давая 0, а затем приводится для умножения. Почему бы просто не заменить 0.1?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...