mirror of
https://github.com/RGBCube/serenity
synced 2025-07-27 12:17:44 +00:00
Calculator: Add adding/subtracting/multiplying/dividing by a percentage
It's now possible to easily calculate 50% of 50. :^)
This commit is contained in:
parent
21cc8f65f5
commit
451ae985bf
1 changed files with 8 additions and 1 deletions
|
@ -12,6 +12,12 @@
|
||||||
|
|
||||||
Optional<Crypto::BigFraction> Calculator::operation_with_literal_argument(Operation operation, Crypto::BigFraction argument)
|
Optional<Crypto::BigFraction> 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
|
// If a previous operation is still in progress, finish it
|
||||||
// Makes hitting "1+2+3=" equivalent to hitting "1+2=+3="
|
// Makes hitting "1+2+3=" equivalent to hitting "1+2=+3="
|
||||||
if (m_binary_operation_in_progress != Operation::None) {
|
if (m_binary_operation_in_progress != Operation::None) {
|
||||||
|
@ -20,7 +26,8 @@ Optional<Crypto::BigFraction> Calculator::operation_with_literal_argument(Operat
|
||||||
|
|
||||||
switch (operation) {
|
switch (operation) {
|
||||||
case Operation::None:
|
case Operation::None:
|
||||||
VERIFY_NOT_REACHED();
|
m_current_value = argument;
|
||||||
|
break;
|
||||||
|
|
||||||
case Operation::Add:
|
case Operation::Add:
|
||||||
case Operation::Subtract:
|
case Operation::Subtract:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue