1

「£Pound」「£Pound」または「£Pound」「R $ Real」を選択すると正常に動作しますが、「R $ Real」を選択すると正常に機能します"R$Real" は "Pound" "R$Real" 計算を実行します。

私はこれを理解しようと何時間も費やしました(非常にイライラします)。

修正方法は?それを行う別の方法はありますか?(「 if 」と「 else if 」も同じ問題を使用してみました)。ありがとう!

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);
}}
4

1 に答える 1

3

JS を修正するには、次の手順を実行します。

問題は、スイッチが単一の文字列に計算され、フォールスルー スイッチ ステートメントjsFiddle を使用して意味を示すことです

JavaScript の Switch ステートメントのドキュメント

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

以下を使用して数字を表示し、前に記号を配置します。このコードは、マイナスを含む適切な場所にコンマと区切り記号を追加するためです。

数値を通貨にフォーマット:

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

于 2013-08-09T12:50:18.963 に答える