From 451ae985bf3284c0c9755031656e7795a2a37144 Mon Sep 17 00:00:00 2001 From: Karol Baraniecki Date: Mon, 26 Dec 2022 17:38:27 +0100 Subject: [PATCH] Calculator: Add adding/subtracting/multiplying/dividing by a percentage It's now possible to easily calculate 50% of 50. :^) --- Userland/Applications/Calculator/Calculator.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/Userland/Applications/Calculator/Calculator.cpp b/Userland/Applications/Calculator/Calculator.cpp index 9e68d1882a..929fabfd71 100644 --- a/Userland/Applications/Calculator/Calculator.cpp +++ b/Userland/Applications/Calculator/Calculator.cpp @@ -12,6 +12,12 @@ Optional Calculator::operation_with_literal_argument(Operation operation, Crypto::BigFraction argument) { + // Support binary operations with percentages, for example "2+3%" == 2.06 + if (m_binary_operation_in_progress != Operation::None && operation == Operation::Percent) { + argument = m_binary_operation_saved_left_side * Crypto::BigFraction { 1, 100 } * argument; + operation = Operation::None; // Don't apply the "%" operation twice + } + // If a previous operation is still in progress, finish it // Makes hitting "1+2+3=" equivalent to hitting "1+2=+3=" if (m_binary_operation_in_progress != Operation::None) { @@ -20,7 +26,8 @@ Optional Calculator::operation_with_literal_argument(Operat switch (operation) { case Operation::None: - VERIFY_NOT_REACHED(); + m_current_value = argument; + break; case Operation::Add: case Operation::Subtract: