Javascript:货币转换器 [英] Javascript: Currency converter

查看:105
本文介绍了Javascript:货币转换器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我是javascript的新手,并且尝试制作一个简单的货币转换器,当我选择£Pound,£Pound或£Pound, R $ Real但选择 R时,它可以正常工作$ Real R $ Real运行 Pound R $ Real计算。

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).

如何解决?还有另一种方法吗? (也尝试使用 if和 else if相同的问题)。谢谢!

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

此处是 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>

这里是 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);
}}


推荐答案

要修复您的JS,以下内容:


问题是您的开关将计算为单个字符串,并且您使用的是落空式开关语句, jsFiddle演示我的意思

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 commas and separators in the right spots, including negative.

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))

这篇关于Javascript:货币转换器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆