【记录】有关parseInt的讨论

问题由来,某群的一个讨论:

parseInt(1/0, 19) = 18;

parseInt的用法:

parseInt(string [, radix])

注意,第一个参数是String类型,当radix未指定的时候,那么默认基地是10。
转换规则:
1、首先查看位置 0 处的字符,判断它是否是个有效数字;如果不是,该方法将返回 NaN,不再继续执行其他操作。
2、位置 0 处的字符有效,该方法将查看位置 1 处的字符,依次向后进行同样的测试,直到发现非有效数字的字符或者到达字符串末尾为止,
3、返回转换成功的数字

因此有比较熟悉的例子:

parseInt('F') => 'NaN'
parseInt('F', 16) => 15

下面将Infinity作为第一参数,结果就是下面这样:

parseInt(Infinity) => 'NaN'
parseInt(Infinity, 16) => 'NaN'

先将Infinity转换为String类型(Infinity.toString() => 'Infinity'),因为不论是十进制还是十六进制,第一个字符串都会失败,所以直接返回'NaN'。
但是'I'在19 ~ 36进制情况下,是可以转换为数字的,而且表示的数字就是18,所以:

parseInt('I', 19) => 18
parseInt('I', 20) => 18
...
parseInt('I', 36) => 18

由于

1/0 => Infinity;

所以

parseInt(1/0, 19) => 18;

由于基数radix的范围介于2 ~ 36之间,所以0 ~ 9, a ~ z, A ~ Z在36进制下都可以转换成功,转换测试如下:

    var arr = [], A_code = 65, Z_code = 65 + 25;for(var i = 0; i <= 9; ++i){arr.push(i);}for(var i = A_code; i <= Z_code; ++i){arr.push(String.fromCharCode(i));}//arr = [0, 1, 2, ... 9, 'A', 'B', ... 'Z']arr.forEach(function(item){// console.log(item, ':', parseInt(item, 36));
    })//output : 0:0, 1:1, 2:2, ... Z:35;

回到Infinity的例子:
第一个字符'I'在19 ~ 36基数的情况下都可以转换成功
第二个字符'N'在36进制中表示为23, 所以'N'在24 ~ 36基数的情况下都可以转换成功,
后面的字符类推
测试:

    function ret_output(arr){var str_output = [];arr.reverse().forEach(function(el, index){str_output.push(el + ' * ' + i + '**' + index); //'**' 表示阶乘
//            str_output.push(el + ' * ' + 'Math.pow(' + i + ',' + index + ')');
        });console.log( i + '进制:',str_output.join(' + '), '=', parseInt(Infinity, i));throw new Error('trans abort');}for(var i = 19; i <= 36; ++i){var arr = [];try{Infinity.toString().split('').forEach(function(item, s_index){var r = parseInt(item, i);if(isNaN(r)){ret_output(arr);}
               arr.push(r);
         if(s_index == Infinity.toString().length - 1){ret_output(arr);}})}catch(e){}}

结果:

19进制: 18 * 19**0 = 18
20进制: 18 * 20**0 = 18
21进制: 18 * 21**0 = 18
22进制: 18 * 22**0 = 18
23进制: 18 * 23**0 = 18
24进制: 18 * 24**5 + 23 * 24**4 + 15 * 24**3 + 18 * 24**2 + 23 * 24**1 + 18 * 24**0 = 151176378
25进制: 18 * 25**5 + 23 * 25**4 + 15 * 25**3 + 18 * 25**2 + 23 * 25**1 + 18 * 25**0 = 185011843
26进制: 18 * 26**5 + 23 * 26**4 + 15 * 26**3 + 18 * 26**2 + 23 * 26**1 + 18 * 26**0 = 224651640
27进制: 18 * 27**5 + 23 * 27**4 + 15 * 27**3 + 18 * 27**2 + 23 * 27**1 + 18 * 27**0 = 270812475
28进制: 18 * 28**5 + 23 * 28**4 + 15 * 28**3 + 18 * 28**2 + 23 * 28**1 + 18 * 28**0 = 324267766
29进制: 18 * 29**5 + 23 * 29**4 + 15 * 29**3 + 18 * 29**2 + 23 * 29**1 + 18 * 29**0 = 385849803
30进制: 18 * 30**6 + 23 * 30**5 + 15 * 30**4 + 18 * 30**3 + 23 * 30**2 + 18 * 30**1 + 29 * 30**0 = 13693557269
31进制: 18 * 31**6 + 23 * 31**5 + 15 * 31**4 + 18 * 31**3 + 23 * 31**2 + 18 * 31**1 + 29 * 31**0 = 16647948474
32进制: 18 * 32**6 + 23 * 32**5 + 15 * 32**4 + 18 * 32**3 + 23 * 32**2 + 18 * 32**1 + 29 * 32**0 = 20115447389
33进制: 18 * 33**6 + 23 * 33**5 + 15 * 33**4 + 18 * 33**3 + 23 * 33**2 + 18 * 33**1 + 29 * 33**0 = 24164998832
34进制: 18 * 34**6 + 23 * 34**5 + 15 * 34**4 + 18 * 34**3 + 23 * 34**2 + 18 * 34**1 + 29 * 34**0 = 28872273981
35进制: 18 * 35**7 + 23 * 35**6 + 15 * 35**5 + 18 * 35**4 + 23 * 35**3 + 18 * 35**2 + 29 * 35**1 + 34 * 35**0 = 1201203301724
36进制: 18 * 36**7 + 23 * 36**6 + 15 * 36**5 + 18 * 36**4 + 23 * 36**3 + 18 * 36**2 + 29 * 36**1 + 34 * 36**0 = 1461559270678

 

转载请注明来自小西山子【http://www.cnblogs.com/xesam/】

本文地址:http://www.cnblogs.com/xesam/archive/2012/10/09/2716018.html

转载于:https://www.cnblogs.com/xesam/archive/2012/10/09/2716018.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/474920.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode MySQL 597. 好友申请 I :总体通过率

文章目录1. 题目2. 解题1. 题目 在 Facebook 或者 Twitter 这样的社交应用中&#xff0c;人们经常会发好友申请也会收到其他人的好友申请。现在给如下两个表&#xff1a; 表&#xff1a; friend_request | sender_id | send_to_id |request_date| |-----------|------------…

贷款利润最大化——利用随机森林和逻辑回归

文章目录分析目的一、数据采集1、数据来源2、数据说明二、数据传输三、数据处理1、查看数据2、清理无用特征值3、标签列分析4、清理只单一值的列5、空值处理6、数据类型转换四、数据挖掘1、构建模型2、导入算法五、总结分析目的 本文针对某信贷网站提供的2007-2011年贷款申请人…

ios学习之UITabBar(标签栏)

自定义TabBar的高度&#xff1a;&#xff08;无论横屏还是竖屏都以竖屏为准&#xff0c;之前就改为横屏的设置出错&#xff0c;找了好久才找到这个问题&#xff09; tabBar [[UITabBarController alloc] init];// 改变tabBarController高度 tabBar.tabBar.frameCGRectMake(0,…

LeetCode MySQL 512. 游戏玩法分析 II

文章目录1. 题目2. 解题1. 题目 Table: Activity ----------------------- | Column Name | Type | ----------------------- | player_id | int | | device_id | int | | event_date | date | | games_played | int | ----------------------- (…

Gtk-WARNING **: 无法在模块路径中找到主题引擎:“pixmap”(转)

Gtk-WARNING**:无法在模块路径中找到主题引擎:“pixmap”的解决如果终端中提示&#xff1a;(gvim:2353): Gtk-WARNING **: 无法在模块路径中找到主题引擎&#xff1a;“pixmap”解决方法是运行&#xff1a; sudo apt-get install gtk2-engines-pixbuf 转载于:https://www.cnbl…

机器学习算法优缺点对比及选择

文章目录偏差&方差常见算法优缺点朴素贝叶斯Logistic Regression&#xff08;逻辑回归&#xff09;线性回归最近邻算法——KNN决策树ID3、C4.5算法CART分类与回归树AdaboostingSVM支持向量机人工神经网络K-Means聚类EM最大期望算法集成算法&#xff08;AdaBoost算法&#x…

LeetCode MySQL 1076. 项目员工II

文章目录1. 题目2. 解题1. 题目 Table: Project ---------------------- | Column Name | Type | ---------------------- | project_id | int | | employee_id | int | ---------------------- 主键为 (project_id, employee_id)。 employee_id 是员工表 Employ…

CouchDB与Couchbase:区别何在,Membase又将如何?

CouchDB与Couchbase&#xff1a;区别何在&#xff0c;Membase又将如何&#xff1f; 2012-05-23 02:05 682人阅读 评论(1) 收藏 举报 本文来源于我在InfoQ中文站翻译的文章&#xff0c;原文地址是&#xff1a;http://www.infoq.com/cn/news/2012/05/couchdb-vs-couchbase-memba…

Sklearn.metrics评估方法

文章目录混淆矩阵分类准确率 accuracy精确率Precision召回率 recallF1值Roc曲线、AUC混淆矩阵 混淆矩阵又称误差矩阵&#xff0c;针对预测值和真实值之间的关系&#xff0c;我们可以将样本分为四个部分&#xff0c;分别是&#xff1a; 真正例&#xff08;True Positive&#x…

HDU 1492 The number of divisors(约数) about Humble Numbers

The number of divisors(约数) about Humble Numbers Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1741 Accepted Submission(s): 852 Problem DescriptionA number whose only prime factors are 2,3,5 or …

LeetCode MySQL 1083. 销售分析 II

文章目录1. 题目2. 解题1. 题目 Table: Product ----------------------- | Column Name | Type | ----------------------- | product_id | int | | product_name | varchar | | unit_price | int | ----------------------- product_id 是这张表的主键Tabl…

常见的几种流失预警模型

建立预警模型的目的是提前识别潜在流失用户&#xff0c;为挽留用户赢得时间。 流失预警模型&#xff0c;不应该只是单一的模型&#xff0c;而应该是一系列模型。预警模型的优劣通常用准确率、召回率来衡量。准确率&#xff1a;预测为流失的用户中&#xff0c;有多少真的流失。召…

WP7 网络请求之WebClient

WebClient运行于UI线程&#xff0c;支持编码方式的设定、支持POST/GET方式提交、不支持同步请求、不支持超时设定。WP7会缓存URL链 接&#xff0c;所以两次请求&#xff0c;尽管网络端数据发生了变化&#xff0c;得到的还会是同样的数据&#xff0c;这点要特别注意&#xff0c;…

Jupyter Notebook安装 nbextensions 插件

安装 nbextensions 插件 一、打开Anaconda Prompt窗口&#xff0c;执行第一个命令&#xff0c;用于安装nbextensions&#xff1a; pip install jupyter_contrib_nbextensions 二、再执行第二个命令&#xff0c;用于安装 javascript and css files jupyter contrib nbextens…

LeetCode MySQL 1084. 销售分析III

文章目录1. 题目2. 解题1. 题目 Table: Product ----------------------- | Column Name | Type | ----------------------- | product_id | int | | product_name | varchar | | unit_price | int | ----------------------- product_id 是这个表的主键Tabl…

15.使用using和try/finally来做资源清理

只有是实现了IDispose接口的类型的调用都应使用using 或者try/finally释放对象。转载于:https://www.cnblogs.com/movemoon/archive/2012/10/24/2736571.html

数据分析常用Python库:数值计算、可视化、机器学习等领域

镜像pip安装 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/ 豆瓣(douban) http://pypi.douban.com/simple/ 清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/ 中国科学技术大学 http://pypi.mirrors.ustc.edu.cn…

LeetCode MySQL 1322. 广告效果

文章目录1. 题目2. 解题1. 题目 表: Ads ------------------------ | Column Name | Type | ------------------------ | ad_id | int | | user_id | int | | action | enum | ------------------------ (ad_id, user_id) 是该表的主键…

linux下练习 c++ 容器set、multimset的特性

print.h //print.h#include <iostream>using namespace std;#ifndef print_fun#define print_funtemplate<typename T>///显示序列数据void print(T b,T e,char c ){bool isExitfalse;while (b!e){cout<<*b<<c;isExittrue;}if(isExit) cout<<end…

Python数据预处理数据的方法总结(使用sklearn-preprocessing)

文章目录数据预处理思路数据预处理方法1 标准化&#xff1a;去均值&#xff0c;方差规模化2 规模化稀疏数据3 规模化有异常值的数据4 正则化Normalization5 二值化–特征的二值化6 类别特征编码7 弥补缺失数据7 创建多项式特征数据预处理思路 1.首先要明确有多少特征&#xff…