Jake McLaughlin
Jake McLaughlin

Reputation: 81

JavaScript parseFloat() issue

Okay so my code works fine but when a decimal i.e. 60.1, 60.2, 60.3, etc. is input for #chance it screws up profit and pay.

For example: 60% is input for chance, 1 for bet. It returns 1.65 for pay and 0.65 for profit. That's all correct.

But when I put 60.1, it returns 16.5 ( wrong decimal ) and 15.5 for profit. 16.5 seems like an easy fix but Idk how to fix it, but I have no idea why it's returning 15.5 for profit and thought maybe if I fixed pay it would fix the issue with profit.

What's wrong?

Thanks.

<script>
    $(document).ready(function(){

        function updateValues() {
            // Grab all the value just incase they're needed.
            var chance = $('#chance').val();
            var bet = $('#bet').val();
            var pay = $('#pay').val();
            var profit = $('#profit').val();

            // Calculate the new payout.
            var remainder = 101 - chance;
            pay = Math.floor((992/parseFloat((chance+0.5))) *100)/100;


            // Calculate the new profit.
            profit = bet*pay-bet;
                            profit = profit.toFixed(6);


            // Set the new input values.
            $('#chance').val(chance);
            $('#bet').val(bet);
            $('#pay').val(pay);
            $('#profit').val(profit);
        }


        parseInt($('#chance').keyup(updateValues));
        parseInt($('#bet').keyup(updateValues));
        parseInt($('#pay').keyup(updateValues));
        parseInt($('#profit').keyup(updateValues));


    });
</script>

Upvotes: 1

Views: 2531

Answers (3)

StackSlave
StackSlave

Reputation: 10627

Try something like this:

$(document).ready(function(){
  function updateValues(){
    var chance = $('#chance').val();
    var bet = $('#bet').val();
    var pay = $('#pay').val();
    var profit = $('#profit').val();
    pay = ((992/Math.floor(+chance+0.5))/10).toFixed(2);
    profit = (bet*pay-bet).toFixed(6);
    $('#chance').val(chance);
    $('#bet').val(bet);
    $('#pay').val(pay);
    $('#profit').val(profit);
  }
  $('#chance').keyup(updateValues);
  $('#bet').keyup(updateValues);
  $('#pay').keyup(updateValues);
  $('#profit').keyup(updateValues);
});

Something is wrong with your Math.

Note:

You don't have to use parseInt() or parseFloat() to make Strings to Numbers. the + symbol in front of your String that is a Number will convert it to a Number.

See http://jsfiddle.net/PHPglue/JQJMD/ for more details.

Upvotes: 0

Bergi
Bergi

Reputation: 664346

parseFloat((chance+0.5))

looks very wrong. chance is a string, so the + operator will perform string concatenation. When you input 60, it becomes

parseFloat("60"+0.5) === 600.5

while when you input 60.1 it is

parseFloat("60.1"+0.5) === 60.1

You probably wanted

(992/(parseFloat(chance)+0.5))*100
// or
(992/parseFloat(chance)+0.5)*100
// or
992/parseFloat(chance)*100+0.5
// or something along these lines

Upvotes: 2

Amadan
Amadan

Reputation: 198324

Change parseFloat((chance+0.5)) into (parseFloat(chance)+0.5).

Actually, I can't see why it's working with 60, either. chance, as a value of a text field, is a string: "60". Strings don't add, they concatenate: "60" + 0.5 is "600.5", same as "60" + "0.5".

Upvotes: 1

Related Questions