为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

30秒到达战场 2019-04-17 18:15:42
我提供的这组代码应该输入任何数字并进行反转。目前该功能在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?您是否知道任何可以帮助改善功能逻辑的解决方案,并且具有可以产生预期结果的给定规则和限制?
查看完整描述

2 回答

?
慕莱坞森

TA贡献1810条经验 获得超4个赞

如果输入是整数或浮点数,那么你想要的是不可能的。在整数或浮点数上没有“前导零”这样的东西。如果你使用前导零来创建一个整数文字,它就会变成一个八进制文字(改变这个值;这就是为什么n = 0456456456它的行为方式,0456456456只是八进制的拼写方式79322414)。如果您使用前导零解析一个字符串来生成一个整数,则只需忽略它们(parseInt('000123')生成相同的值parseInt('123'),即值123)。这就是为什么016540变成257:八进制文字相当于十进制文字7520,并将其反转并解析回整数忽略前导0,离开257

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

要么专门使用字符串,要么接受你将丢失前导零。

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

//leading zeros should be removed

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


查看完整回答
反对 回复 2019-05-17
?
万千封印

TA贡献1891条经验 获得超3个赞

你必须把它作为一个字符串传递,因为0你的数字中的前导不会被解释为这样。


例如:


// Will always be evaluated as 1

let foo = 001;

console.log(foo);

如果你提供n的string,你可以做这样的:


reverseNumberWithBuiltInFunctions = n => parseFloat(n.toString().split('').reverse().join(''));


console.log(reverseNumberWithBuiltInFunctions('0456456456'))

console.log(reverseNumberWithBuiltInFunctions('056985'))


查看完整回答
反对 回复 2019-05-17
  • 2 回答
  • 0 关注
  • 545 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信