这是我的代码
var fifty = prompt("Enter amount ");
var twenty;
alert(twenty=parseInt(fifty/50) + " x " + "50 dollar bill");
alert(parseInt(twenty/20) + " x " + "20 dollar bill");
我想要的是美元钞票。 例如,当我输入“120”时它应该返回2x50票据和1x20美元票据,我知道返回的值是字符串类型所以我将它们转换为数字,但是在20美元的钞票上它返回“Nan x 20 dollar bils”我无法理解为什么
答案 0 :(得分:1)
我已经改变了你的变量名,使它更清晰一些。
// I'll use the example of 120 to demonstrate
// The total amount, e.g. 120
var amount = prompt("Enter amount ");
// First, convert the inputted string into an int
var amountAsInt = parseInt(amount, 10);
// Then, divide by 50 (which equals 2.4), and then use
// Math.floor() to "chop off" the decimal part
var numberOfFifties = Math.floor(amountAsInt/50);
// Leaving us with numberOfFifties = 2
// We can now use 'modulus' to give the amount left.
// If you haven't come across modulus before, it gives
// the remainder after dividing by the given number (here: 50)
var amountLeft = amount % 50;
// Do the same with the amount left to find the number of 20s
var numberOfTwenties = Math.floor(amountLeft / 20);
if(numberOfFifties > 0){alert(numberOfFifties + " x " + "50 dollar bill(s)");}
if(numberOfTwenties > 0){alert(numberOfTwenties + " x " + "20 dollar bill(s)");}
JSFiddle: http://jsfiddle.net/7p57e3u1/3/
NaN的原因
你可以通过查看这个JSFiddle来了解你获得NaN的原因。
你设置二十等于整个字符串,因此它是“非数字”(NaN)。
alert(twenty=parseInt(fifty/50) + " x " + "50 dollar bill");
在这里,您似乎假设
twenty=parseInt(fifty/50)
将被视为一个单独的“部分”,但事实上,它使用整个表达式,将twenty
设置为alert()中输出的整个字符串:
twenty = parseInt(fifty / 50) + " x " + "50 dollar bill"
即。 (对于上面的例子)
twenty = "2 x 50 dollar bill"
调试(以及创建更易理解且可维护的代码)的有用技术是将事情分解为非常简单的步骤,就像我在上面的示例代码中所做的那样。这个(可以说)被分解得太过分了,但是把它作为解决这类问题的第一种技术。
答案 1 :(得分:1)
请停止使用parseInt
分隔浮点值的整数部分,仅将其用于将字符串转换为整数。当您使用parseInt
浮点值转换为字符串并且某个整数被解析回来时,可能会出现浮点数转换为字符串的情况,如5.1234E-6
和parseInt
将返回在这种情况下5
。请改用Math.floor()
。
var sum = parseInt(prompt("Enter amount "));
var twenty = Math.floor(sum/50);
alert(twenty + " x " + "50 dollar bill");
alert(Math.floor((sum - (twenty*50))/20) + " x " + "20 dollar bill");
答案 2 :(得分:0)
请注意,我并未尝试在此修复算法,只是输入错误和类型。
您应首先将fifty
解析为int,然后只将其除以50
,因为即使在除以50
之后您想要一个int,您也可以让parseInt
初始化NaN
}。
另外,请注意parseInt需要一个基数(此处为10),如果给出了不可解析的值,它仍然可以返回var fifty = parseInt(prompt("Enter amount "), 10);
alert(twenty=parseInt(fifty/50, 10) + " x " + "50 dollar bill");
。
|
作为替代方案,你可以使用按位或(parseInt(x, 10)
)行为almoste,如NaN
,除非它返回parseInt
0
时,它会使用按位或运算符返回|
。
使用var fifty = prompt("Enter amount ") | 0;
alert(twenty=((fifty/50)|0) + " x " + "50 dollar bill");
{{1}}
答案 3 :(得分:0)
使用以下内容:
var fifty = prompt("Enter amount ");
var twenty;
twenty=parseInt(fifty/50);
var rem = fifty - (twenty * 50);
alert(twenty + " x " + "50 dollar bill");
alert(parseInt(rem/20) + " x " + "20 dollar bill");
希望它会有所帮助!!
答案 4 :(得分:0)
您的逻辑存在问题。
也许是这样的: http://jsfiddle.net/2e7cs06v/
var total = prompt("Enter amount ");
var numOf50=parseInt(total/50);
var moneyLeft = total - (numOf50 * 50);
alert(numOf50 + " x " + "50 dollar bill");
alert(parseInt(moneyLeft/20) + " x " + "20 dollar bill");
答案 5 :(得分:0)
因为您已将更多字符串(+" x" +" 50美元钞票")解析为parseInt()函数。所以parseInt函数无法解析"美元账单"文本值。
var fifty = prompt("Enter amount ");
var twenty = parseInt(fifty/50);
alert( twenty + " x " + "50 dollar bill");
alert(parseInt(twenty/20) + " x " + "20 dollar bill");