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

ice*_*lip 4 javascript function

我提供的这组代码应使用我输入的任意数字并将其取反。当前,该函数在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 integers

function 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)
    )
}
Run Code Online (Sandbox Code Playgroud)

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

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

您是否知道有任何解决方案可以通过给定的规则和限制来帮助改进功能的逻辑,从而产生预期的结果?

Sha*_*ger 5

如果输入是整数或浮点数,那么您想要的是不可能的。整数或浮点数都没有“前导零”之类的东西。如果使用前导零创建整数文字,它将变成八进制文字(更改值;这就是为什么n = 0456456456这样做的行为,0456456456只是拼写的八进制方法79322414)。如果您将一个以零开头的字符串解析为整数,则会将其忽略(parseInt('000123')产生与相同的值parseInt('123'),即value 123)。这就是为什么016540变成257:在八进制相当于十进制文本7520,并扭转它和解析回整数忽略了领先0,离开257

您不能保留这样的前导零,因为它们不存在于字符串形式之外。而且您会在反转中丢失尾随零,因为它们在新形式中将成为前零。

要么只使用字符串,要么接受您将丢失前导零。

我会注意到您在注释中的规则指定:

//leading zeros should be removed
Run Code Online (Sandbox Code Playgroud)

所以它在这里按预期工作。