为什么尾随和前导零会导致我的函数返回我不想要的值?

我提供的这组代码应该输入任何数字并进行反转。目前该功能在n = 21.365或n = 5698时起作用,但当n = 0456456456时,它返回41422397而不是6546546540,或者当n = 056985时,它返回58965而不是589650,当n = 016540时,它返回257而不是45610。

这就是我到目前为止所写的内容

//rules & limitations//negative numbers should remain negative//leading zeros should be removed//the function can accept floats or integers
//the function will return integers as integersfunction reverseNumberWithBuiltInFunctions(n) {
    return (
        parseFloat (
            n
            //convert the number to a string
            .toString()
            //convert to array of characters
            .split('')
            //reverse array of characters
            .reverse()
            //join reversed array of characters
            .join('')
        ) * Math.sign(n)
    )}

我想如果n = 001则返回100,或者如果n = 0456456456,则返回6546546540。基本上我在导致或尾随零或两者都包含在“n”时遇到麻烦,或者当数字存在某种模式时似乎出现问题。

另外,为什么当n = 016540时它返回257?

您是否知道任何可以帮助改善功能逻辑的解决方案,并且具有可以产生预期结果的给定规则和限制?


30秒到达战场
浏览 546回答 2
2回答

慕莱坞森

如果输入是整数或浮点数,那么你想要的是不可能的。在整数或浮点数上没有“前导零”这样的东西。如果你使用前导零来创建一个整数文字,它就会变成一个八进制文字(改变这个值;这就是为什么n = 0456456456它的行为方式,0456456456只是八进制的拼写方式79322414)。如果您使用前导零解析一个字符串来生成一个整数,则只需忽略它们(parseInt('000123')生成相同的值parseInt('123'),即值123)。这就是为什么016540变成257:八进制文字相当于十进制文字7520,并将其反转并解析回整数忽略前导0,离开257。您不能保留这样的前导零,因为它们不存在于字符串形式之外。并且你将在逆转时失去尾随零,因为它们在新形式中成为前导零。要么专门使用字符串,要么接受你将丢失前导零。我会注意到你在注释中的规则指定://leading zeros should be removed所以它在这里按预期工作。

万千封印

你必须把它作为一个字符串传递,因为0你的数字中的前导不会被解释为这样。例如:// Will always be evaluated as 1let foo = 001;console.log(foo);如果你提供n的string,你可以做这样的:reverseNumberWithBuiltInFunctions = n => parseFloat(n.toString().split('').reverse().join(''));console.log(reverseNumberWithBuiltInFunctions('0456456456'))console.log(reverseNumberWithBuiltInFunctions('056985'))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript