'Reduce number with percent

I'm trying to implement a code check:

const transfer = async (  
  amount: string
): Promise<void> => {
  
  if (parseFloat(amount) <= parseFloat('0.01')) {
    amount = String((2 / 100) * amount);
  }
  .......
}

In general I want to make a check and reduce the amount with some very small percent. But I get error for this line * amount);:

TS2363: The right-hand side of an arithmetic operation must be of type 'any', 'number', 'bigint' or an enum type.

Do you know how I can fix this issue?



Solution 1:[1]

To resolve this, both string results have to be converted to number. This can be achieved by these 3 method:

  1. Unary Operator (+)
  2. parseFloat() //Already you used
  3. Multiply with number

1.Using Unary Operator (+) :

const transfer = async (  
  amount: string
): Promise<void> => {
  
  if (+amount <= 0.01) {
    amount = String(+(2 / 100) * +amount);
  }
   // More code here...
}

2.parseFloat() :

  const transfer = async (  
  amount: string
): Promise<void> => {
  
  if (parseFloat(amount) <= 0.01) {
    amount = String((2 / 100) * parseFloat(amount));
  }

  // More code here...
}

3.Multiply with number :

const transfer = async (  
      amount: string
    ): Promise<void> => {
      
      if ((amount*1) <= 0.01) {
        amount = String((2 / 100) * (amount*1));
      }
    
      // More code here...
    }

this error most off occurs by too much brackets.you need to try 1 method Unary Operator (+). it help to convert string into number and you don't need to wrap a string value into a brackets.

Solution 2:[2]

You should be doing String((2 / 100) * parseFloat(amount));: you forgot to convert it to a number for arithmetic operations. Also, there is no need to use parseFloat(0.01) when you can use 0.01 directly. Your updated code would look like this:

const transfer = async (  
  amount: string
): Promise<void> => {
  
  if (parseFloat(amount) <= 0.01) {
    amount = String((2 / 100) * parseFloat(amount));
  }

  // More code here...
}

Also, if you want convert to string, a simpler way is to use template literals:

if (parseFloat(amount) <= 0.01) {
  amount = `2 / 100 * ${parseFloat(amount)}`;
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Prit Hirpara
Solution 2