Consolidating the comments:
As Scott Sauyet said, toFixed is in the wrong place. You end up with number + string, which converts the number to string and does string concatenation.
As I said: That's not the only problem. You don't parseFloat something that's already a number. Do so converts the number to string, then parses that string as a number, which is at best pointless. :-)
As Barmar said: Do the calculation, then use toFixed on the result:
console.log((23.50 + (Math.random() * 0.10) + 0.01).toFixed(2));
Also, + is lower precedence than *, so you don't need those inner parens (or the last 0 on 0.10):
console.log((23.50 + Math.random() * 0.1 + 0.01).toFixed(2));
...though of course, you could include them for style reasons if you liked.
parseFloatsomething that's already a number.toFixed(2)returns a string. Adding that to a number becomes string concatenation.toFixed(2)at the end when you want to show it.parseFloat((Math.random() * 0.10) + 0.01)could it be that you meanMath.floor(Math.random() * 10 + 1) / 100