0
ローマ数字変換機能で予期しない結果が発生しています。 1桁、2桁、4桁の数字が正しく評価されます。また、4桁の数字の3桁も正しく処理します。数字が3桁の場合、100の場所を自分の場所と同じように評価します。 555のための "DLV" リターン:1555のための "VVV"ローマ数字スイッチのケースが正しく評価されない
目的の戻り値:1555のための "MDLV" 戻る: "MDLV"
はなぜ555のリターンを希望
function convertToRoman(num) {
var evaluate = num.toString();
var replace = "";
var oneUnit;
var fiveUnit;
var tenUnit;
for (var i = 0; i < evaluate.length; i++)
{
switch (evaluate.length | i)
{
case 1|0:
case 2|1:
case 3|2:
case 4|3:
oneUnit = "I";
fiveUnit = "V";
tenUnit = "X";
break;
case 2|0:
case 3|1:
case 4|2:
oneUnit = "X";
fiveUnit = "L";
tenUnit = "C";
break;
case 3|0:
case 4|1:
oneUnit = "C";
fiveUnit = "D";
tenUnit = "M";
break;
case 4|0:
oneUnit = "M";
fiveUnit = "MMMMM";
tenUnit = "MMMMMMMMMM";
break;
}
switch (evaluate.charAt(i))
{
case "1":
replace += oneUnit;
break;
case "2":
replace += oneUnit + oneUnit;
break;
case "3":
replace += oneUnit + oneUnit + oneUnit;
break;
case "4":
replace += oneUnit + fiveUnit;
break;
case "5":
replace += fiveUnit;
break;
case "6":
replace += fiveUnit + oneUnit;
break;
case "7":
replace += fiveUnit + oneUnit + oneUnit;
break;
case "8":
replace += fiveUnit + oneUnit + oneUnit + oneUnit;
break;
case "9":
replace += oneUnit + tenUnit;
break;
}
}
num = replace;
return num;
}
3桁の数字の最初の2桁が正しいケースに割り当てられていませんか?
言語の構文に問題があるようです。論理OR演算子( '||')ではなく、ビット単位のOR演算子( '|')を使用していますか? – user1421750
私は、if文に "&&"のようなものが必要なので、両方の文が真でなければならないようにしようとしています。私はそれをどのように達成するのですか? –
switch文は、1つの式のみをその大文字と小文字の値で評価することができます。スイッチブロックを一連のif/elseステートメントに変換する必要があります。 – user1421750