0

So this is most likely simple but I have spent all day trying different approaches and googling for solutions.

for some reason when I use + with 2 numbers instead of adding the numbers together node is joining the numbers.

  Company.findById(req.id, (err, doc) => {

      if (err) {
          callback(err, err);
      } else {

          var i = doc.TotalGranted; // i.e number value of 200
          var e = doc.TotalAvailable; // i.e number value of 200

          var newTotalgranted = i + req.newNumber; // i.e number value of 100
          var newAvailable = e - req.newNumber; // i.e number value of 100

          doc.TotalGranted= newTotalgranted;
          doc.TotalAvailable= newAvailable;

          doc.save((err, doc) => {
              if (err) {
                  callback(err, err);
              }
              callback(null, 'success');
          });
      }
  });

now instead of totalgranted = 300 instead it equals 200,100

if it helps here is the relevant section of the returned document from mongo, these are not contained in an array

  TotalAvailable: 200,
  TotalGranted: 200,



newNumber: '100',

the new number is a string but its actually coming from a returned document as well. so maybe i need to convert the newNumber from a string i have tried this but can not work it out.

4
  • 1
    Replace req.newNumber usage with Number(req.newNumber) Commented Feb 8, 2018 at 7:14
  • What is the result of i + parseInt(req.newNumber)? Commented Feb 8, 2018 at 7:14
  • thanks for the fast replies guys checking now Commented Feb 8, 2018 at 7:17
  • 1
    "when I use + with 2 numbers" but you don't. A string is not a number! newNumber: '100'. And someString + whatever or whatever + someString performs a string concatenation. That's the expected behaviour, not a bug. Commented Feb 8, 2018 at 7:20

2 Answers 2

1

Try,

Company.findById(req.id, (err, doc) => {

  if (err) {
      callback(err, err);
  } else {

      var i = doc.TotalGranted; // i.e number value of 200
      var e = doc.TotalAvailable; // i.e number value of 200

      var newTotalgranted = (i + (req.newNumber * 1)); // i.e number value of 100
      var newAvailable = (e - (req.newNumber * 1); // i.e number value of 100

      doc.TotalGranted= newTotalgranted;
      doc.TotalAvailable= newAvailable;

      doc.save((err, doc) => {
          if (err) {
              callback(err, err);
          }
          callback(null, 'success');
      });
  }
});
Sign up to request clarification or add additional context in comments.

2 Comments

I think the problem in his code is neither i nor e but rather req.newNumber. See newNumber: '100'
yes, since it is being considered as string we can do a simple multiply of 1 to that will solve this. I made it for i and e which holds number already! Now changed.
1

Yeah, you are right, your req.newNumber is a string so javascript by default performs string concatenation. Company.findById(req.id, (err, doc) => {

  if (err) {
      callback(err, err);
  } else {

      var i = doc.TotalGranted; // i.e number value of 200
      var e = doc.TotalAvailable; // i.e number value of 200
      var newNumber = parseInt(req.newNumber);  // or use Number(req.newNumber) or (req.newNumber * 1)
      var newTotalgranted = i + newNumber; // i.e number value of 100
      var newAvailable = e - newNumber; // i.e number value of 100

      doc.TotalGranted= newTotalgranted;
      doc.TotalAvailable= newAvailable;

      doc.save((err, doc) => {
          if (err) {
              callback(err, err);
          }
          callback(null, 'success');
      });
  }
});

this would work but best way will be to take a number from request parameter itself which will reduce your overhead of converting a string into an integer

You can read more about various strategy on number conversion from string here

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.