c# - Оператор '*' не может применяться к операндам типа 'double' и 'decimal'





(5)


Вы не можете умножить decimal на double . Вы можете исправить это путем литья типов, но вы, вероятно, просто хотите придерживаться decimal для всех цен и ставок НДС.

decimal тип был разработан, чтобы быть полезным для финансовых расчетов, поскольку он предлагает высокую точность за счет уменьшения диапазона для размера типа в байтах.

Я получаю это сообщение в своей программе, но я не знаю, как его исправить. У меня есть поиск в сети, но я не нашел ничего, что могло бы мне помочь.

private double Price;
private int Count;
private double Vat;

private const double foodVATRate = 0.12, otherVATRate = 0.25;
private decimal Finalprice;
private decimal Rate;

public void Readinput()
{
    Finalprice = (decimal)(Price * Count);
}

private void cal()
{
    char answer = char.Parse(Console.ReadLine());
    if ((answer == 'y') || (answer == 'Y'))
        Vat = foodVATRate;
    else
        Vat = otherVATRate;

    Rate = Vat * Finalprice;

Оператор '*' не может применяться к операндам типа «double» и «decimal» - это то, что появляется на Rate = Vat * Finalprice; и я не знаю, могу ли я это исправить




Измените foodVATRate на decimal . Кажется, нет никаких причин, чтобы он был двойным.




Попробуй это:

Rate = (decimal)Vat * Finalprice;



Вам нужно бросить один на другой. Я предполагаю, что как Цена, так и все ваши ставки НДС должны быть действительно десятичными - двойная (обычно) не подходит для работы с любыми денежными значениями.




Вы можете просто использовать Binding; Например, я хочу удерживать сумму платежа, которая не может превышать 100. Поэтому я написал класс

puclic class Payment : INotifyPropertyChanged
{
    private int _amountDecimals;
    public int AmountDecimals
    {
        get
        {
            return _amountDecimals;
        }

        set
        {
            if (value <= 100)
            {
                _amountDecimals = value;
            }
            OnPropertyChanged();
        }
    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
}

Таким образом, это свойство будет устанавливать значение AmountDecimals, если пользователь вводит значение, пока оно не превысит 100

Затем просто установите привязку через код в конструкторе страницы (или из xaml)

var myPayment =new Payment(); //this will hold page(view) data
BindingContext = myPayment;
var paymentEntry = new Entry();
paymentEntry.Keyboard = Keyboard.Numeric;
paymentEntry.SetBinding(Entry.TextProperty, "AmountDecimals");            

Таким образом, пользователь вводит числовое значение в запись, но если он / она пытается ввести значение более 100, привязка просто возвращает его к старому значению. Вы можете просто написать свой код в свойствах вашего класса, как это (на установщиков). Поэтому, если вы хотите, чтобы какое-либо свойство содержало только 5 символов, вы можете написать что-то вроде этого (коды могут быть неправильными, я их не компилировал :))

    private string _name;
    public string Name
    {
        get
        {
            return _name;
        }

        set
        {
            if ((value!= null && value.length <= 5) || value == null)
            {
                _name = value;
            }
            OnPropertyChanged();
        }



c#  

c#