admin管理员组

文章数量:1410689

Im new in javascript and I'm trying to make a simple currency converter, it is working fine when I select "£Pound" "£Pound" or "£Pound" "R$Real" but when I select "R$Real" "R$Real" runs the "Pound" "R$Real" calculation.

I spent hours trying to figure this out (very frustrating).

How to fix it? Is there another way to do it? (also tried using " if " and " else if " same issue). Thanks!

Here`s the HTML:

<label>Amount:</label>
<input type="text" id="amount" />
<label>From:</label>
<select id="select1">
    <option value="pound">&pound; Pound</option>
    <option value="real">R$ Real</option>
</select>
<label>To:</label>
<select id="select2">
    <option value="pound">&pound; Pound</option>
    <option value="real">R$ Real</option>
</select>
<input type="button" onClick="calculation()" value="calculate" />
<div id="result"></div>

Here`s the JS:

function calculation() {
var amount = document.getElementById('amount').value;
var currency1 = document.getElementById('select1').value;
var currency2 = document.getElementById('select2').value;

switch((currency1)&&(currency2)){
    case "pound":
    case "pound":
        var y = amount * 1;
        document.getElementById('result').innerHTML = "&pound; " + parseFloat(Math.round(y * 100) / 100).toFixed(2);
        break
    case "pound":
    case "real":
        var x = currency2 = 3.40;
        var y = amount * x;
        document.getElementById('result').innerHTML = "R$ " + parseFloat(Math.round(y * 100) / 100).toFixed(2);
        break
    case "real":
    case "real":
        var y = amount * 1;
        document.getElementById('result').innerHTML = "R$ " + parseFloat(Math.round(y * 100) / 100).toFixed(2);
        break
    case "real":
    case "pound":
        var x = currency2 = 3.40;
        var y = amount / x;
        document.getElementById('result').innerHTML = "&pound; " + parseFloat(Math.round(y * 100) / 100).toFixed(2);
}}

Im new in javascript and I'm trying to make a simple currency converter, it is working fine when I select "£Pound" "£Pound" or "£Pound" "R$Real" but when I select "R$Real" "R$Real" runs the "Pound" "R$Real" calculation.

I spent hours trying to figure this out (very frustrating).

How to fix it? Is there another way to do it? (also tried using " if " and " else if " same issue). Thanks!

Here`s the HTML:

<label>Amount:</label>
<input type="text" id="amount" />
<label>From:</label>
<select id="select1">
    <option value="pound">&pound; Pound</option>
    <option value="real">R$ Real</option>
</select>
<label>To:</label>
<select id="select2">
    <option value="pound">&pound; Pound</option>
    <option value="real">R$ Real</option>
</select>
<input type="button" onClick="calculation()" value="calculate" />
<div id="result"></div>

Here`s the JS:

function calculation() {
var amount = document.getElementById('amount').value;
var currency1 = document.getElementById('select1').value;
var currency2 = document.getElementById('select2').value;

switch((currency1)&&(currency2)){
    case "pound":
    case "pound":
        var y = amount * 1;
        document.getElementById('result').innerHTML = "&pound; " + parseFloat(Math.round(y * 100) / 100).toFixed(2);
        break
    case "pound":
    case "real":
        var x = currency2 = 3.40;
        var y = amount * x;
        document.getElementById('result').innerHTML = "R$ " + parseFloat(Math.round(y * 100) / 100).toFixed(2);
        break
    case "real":
    case "real":
        var y = amount * 1;
        document.getElementById('result').innerHTML = "R$ " + parseFloat(Math.round(y * 100) / 100).toFixed(2);
        break
    case "real":
    case "pound":
        var x = currency2 = 3.40;
        var y = amount / x;
        document.getElementById('result').innerHTML = "&pound; " + parseFloat(Math.round(y * 100) / 100).toFixed(2);
}}
Share Improve this question edited Aug 9, 2013 at 12:51 abc123 18.9k7 gold badges55 silver badges84 bronze badges asked Aug 9, 2013 at 12:47 Thiago SolciaThiago Solcia 231 silver badge4 bronze badges 0
Add a ment  | 

2 Answers 2

Reset to default 5

To fix your JS do the following:

The issue is that your switch would pute to a single string, and you are using fall-through switch statements, jsFiddle to demonstrate what I mean.

Switch Statement Documentation for JavaScript

function calculation() {
    var amount = document.getElementById('amount').value;
    var currency1 = document.getElementById('select1').value;
    var currency2 = document.getElementById('select2').value;

    switch (currency1 + ' ' + currency2) {
        case "pound pound":
            var y = amount * 1;
            document.getElementById('result').innerHTML = "&pound; " + parseFloat(Math.round(y * 100) / 100).toFixed(2);
            break
        case "pound real":
            var x = currency2 = 3.40;
            var y = amount * x;
            document.getElementById('result').innerHTML = "R$ " + parseFloat(Math.round(y * 100) / 100).toFixed(2);
            break
        case "real real":
            var y = amount * 1;
            document.getElementById('result').innerHTML = "R$ " + parseFloat(Math.round(y * 100) / 100).toFixed(2);
            break
        case "real pound":
            var x = currency2 = 3.40;
            var y = amount / x;
            document.getElementById('result').innerHTML = "&pound; " + parseFloat(Math.round(y * 100) / 100).toFixed(2);
    }
}

Use the below to display the number and then just put the symbol in front, as this code will add mas and separators in the right spots, including negative.

Format number to currency:

function formatCurrency(num, precision) {
  //identify '(123)' as a negative number
  if (typeof num == 'string' && num.toString().indexOf('\\(') >= 0) {
    num = '-' + num;
  }

  if (num === '' || (num === '-' && precision === -1)) {
    return;
  }

  // if the number is valid use it, otherwise clean it
  if (isNaN(num)) {
    // clean number
    if (num === '' || (num === '-' && precision === -1)) {
      return;
    }

    if (isNaN(num)) {
      num = '0';
    }
  }

  // evalutate number input
  var numParts = String(num).split('.');
  var isPositive = (num == Math.abs(num));
  var hasDecimals = (numParts.length > 1);
  var decimals = (hasDecimals ? numParts[1].toString() : '0');
  var originalDecimals = decimals;

  // format number
  num = Math.abs(numParts[0]);
  num = isNaN(num) ? 0 : num;
  if (precision >= 0) {
    decimals = parseFloat('1.' + decimals); // prepend "0."; (IE does NOT round 0.50.toFixed(0) up, but (1+0.50).toFixed(0)-1
    decimals = decimals.toFixed(precision); // round
    if (decimals.substring(0, 1) == '2') {
      num = Number(num) + 1;
    }
    decimals = decimals.substring(2); // remove "0."
  }
  num = String(num);

  for (var i = 0; i < Math.floor((num.length - (1 + i)) / 3); i++) {
    num = num.substring(0, num.length - (4 * i + 3)) + ',' + num.substring(num.length - (4 * i + 3));
  }

  if ((hasDecimals && precision == -1) || precision > 0) {
    num += '.' + decimals;
  }

  // format symbol/negative
  var format = isPositive ? '%s%n' : '(%s%n)';
  var money = format.replace(/%s/g, '$');
  money = money.replace(/%n/g, num);
  return money;
}

console.log(formatCurrency(12002031203120, 2))

 <!DOCTYPE html>
<html lang="en">
    <head>
        
        <meta charset="UTF-8" name="viewport" content="width=device-width, initial-scale=1"/>
        <style>
            body{
                background:linear-gradient(3150deg,#7458ff,#a48afc);
        background-size: cover;
        height: 800px;
        display: flex;
        align-items: center;
        justify-content:center;

            }
            .col-md-8{
                background-color: rgb(183, 170, 170);
        padding: 10px 24px;
        border-radius: 20px;
        width: 490px;
            }
            .form-group{
                width: 100%;
        display: flex;
            }
            input{
        width:95%;
        color:aliceblue;
        height: 40px;
        font-size: 1em;
        margin: 0.2em 0;
        border-radius: 10px;
        border: none;
        background: #676666;
        outline: none;
        padding: 0.1em;
    }
    select{
        width: 50%;
        height:40px;
        font-size: 30px;
        cursor: pointer;
        background: #039cfb;
        outline: none;
        color: black;
        
        padding: 0 1em;
        border-radius: 10px;
        border: none;
    }

        </style>
    </head>
<body>
    
    <div class="col-md-6 well">
        <h3 class="text-primary">Javascript - Simple Currency Converter</h3>
        <hr style="border-top:1px dotted #ccc;">
        
        <div class="col-md-8">
            <h4>Converter</h4>
            <hr style="border-top:1px groovy #ccc;"/>
            <div class="form-group">
                <select onchange="Currency(); Calculate()" class="form-control" id="converter" style="width:30%;">
                    <option value="Dollar">Dollar</option>
                    <option value="Pound">Pound</option>
                    <option value="Euro">Euro</option>
                    <option value="Yen">Yen</option>
                    <option value="Yuan">Yuan</option>
                </select>
                <br />
                <input type="number" oninput="Calculate()" class="form-control" id="value1"/>
            </div>
            <br /><br />
            <div class="form-group">
                <label>Pak Rupee:</label>
                <input type="number" class="form-control" id="value2" disabled="disabled"/>
            </div>
        </div>
    </div>
    
    <script>
          function Currency(){
    y = document.getElementById("converter").value;
    return y;
}

function Calculate(){ y = Currency();

x = document.getElementById("value1").value;

if(x == ""){
    document.getElementById("value2").value = "";
}else{
    switch(y){
        case "Dollar":
            document.getElementById("value2").value = x * 215.99;
        break;

        case "Pound":
            document.getElementById("value2").value = x * 72.39;
        break;

        case "Euro":
            document.getElementById("value2").value = x * 63.84;
        break;

        case "Yen":
            document.getElementById("value2").value = x * 0.49;
        break;

        case "Yuan":
            document.getElementById("value2").value = x * 8.20;
        break;
    
}

}

}

    </script>
</body>
</html>

本文标签: Javascript Currency converterStack Overflow