【问题标题】:parseInt() doesn't regard leading zeros, even with radixparseInt() 不考虑前导零,即使使用基数
【发布时间】:2014-12-27 18:36:58
【问题描述】:

当我想将二进制字符串转换为以 10 为底的十进制数(如:parseInt('0001010', 2))时,Javascript 返回一个十进制数,但上面示例中提到的前导零已被忽略的版本。有没有办法解决这个问题?

【问题讨论】:

  • ??该示例的结果应该是数字 10。您期望的是什么?
  • @Pointy 他得到了什么,其实那个数字的结果是十
  • @NPE 哈哈咖啡不够/太多 :) :)
  • 返回原来的数字时,左边不加0。
  • 将长度存储在一个变量中,然后在恢复后添加必要数量的 0。

标签: javascript binary converter base


【解决方案1】:

所以假设你有数字“00000101101101”:

var number = '00000101101101';
var length = number.length;
var decimal_number = parseInt(number, 2);

// going back

var new_number = decimal_number.toString(2);
var new_length = new_number.length;
var n_zeros = length - new_length;
var zeros = (n_zeros >= 2 ? Array(n_zeros+1).join("0") : "0");
new_number = zeros + new_number;

【讨论】:

  • 这是正确的想法,但在 JavaScript 中 0*n_zeros 并没有按照代码的预期去做。 See this old question.
  • @Pointy 所以它不是把字符串“0”n 的次数吗?
  • 不,它没有; * 始终是数字乘法。请参阅我添加到第一条评论的链接。
  • @Juhana 好吧,伙计们,它现在工作了吗?我刚刚重新编辑了它
【解决方案2】:

十进制表示无法跟踪前导零。如果您希望在结果中保留前导零,则需要一种完全不同的方法(例如,将输出保留为字符串)。

或者,如果您事先知道结果的宽度,您可以在输出时用前导零填充它。

【讨论】:

  • 你发布答案时我正在打字 - +1
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-20
  • 2013-04-19
  • 2015-04-05
  • 2020-09-15
  • 1970-01-01
相关资源
最近更新 更多