Значения с плавающей точкой не дают ожидаемого результата в операторе if, использующем MySQL - PullRequest
0 голосов
/ 19 марта 2019

Используя MySQL, при использовании триггера я выбираю значения с плавающей точкой и вставляю их в объявления с плавающей точкой, но когда я пытаюсь сравнить два значения в операторе if, кажется, что он не может сравнивать значения с плавающей точкой. После небольшого исследования я нашел несколько статей об ошибке с плавающей точкой при сравнении с плавающей точкой в ​​операторе if, но в сети нет решения, которое работало бы так, как я ожидал.

TRIGGER `Customer_Details`.`Client_Account_Payback_AFTER_INSERT` AFTER INSERT ON `Client_Account_Payback` FOR EACH ROW
BEGIN


    declare amountPaid float;
    declare amountRamianing float;
    declare loanAmount float;

    select new.Client_Account_Payback_Amount into amountPaid;

    select Client_Account_Borrow_Amount_Remaining 
    from Client_Account_Borrow
    where Client_Account_Borrow_ID = new.Client_Account_Payback_Loan_Borrowed_ID
    into amountRamianing;

    select Client_Account_Amount_Borrowed
    from Client_Account_Borrow
    where Client_Account_Borrow_ID = new.Client_Account_Payback_Loan_Borrowed_ID
    into loanAmount;


    set amountRamianing = amountRamianing + amountPaid;

    IF amountRamianing > loanAmount THEN 
        UPDATE `Client_Account_Borrow`  
        SET `Client_Account_Borrow_Amount_Remaining` = amountRamianing 
        WHERE `Client_Account_Borrow_ID` = new.Client_Account_Payback_Loan_Borrowed_ID; 
    ELSE 
        UPDATE `Client_Account_Borrow` 
        SET `Client_Account_Borrow_Amount_Remaining` = amountRamianing, 
        `Client_Account_Borrow_Paid_Back` = true 
        WHERE `Client_Account_Borrow_ID` = new.Client_Account_Payback_Loan_Borrowed_ID; 
    END IF;
END
...