js 科学计数法 转换为 数字字符 突破幂数正数21位,负数7位的自动转换限制
前天工作中要转换后台返回的一个数据,返回是的科学计算的数字字符,用网上能搜索到的常用两种方法转换会有倍数的限制,然后又搜索了很久,还是没有找到好的方法,虽然也有一些自己写的方法,可还是不能像下面两种方法一样能正常转换各种正负科学计数,且突破幂数正数21位,负数7位的自动转换限制。所以对比了下,花一下午修改测试,基本通用了,只是传入的参数必须为字符串的科学计数。
var num = new Number('3.54545E-3'); // 3.54545e-7
var sBalance = parseFloat("-3465.4556645445E-2"); //此两种方法都可以把 非标准的科学计数 正常转换
console.log(num);
console.log(sBalance);
/* 以上两种方法 可以直接 转换科学计数的字符串 为数字
* 但, Number类型数字会自动转换, 正数是大于等于21位 会自动转换为科学计数,负数小于等于7位 会自动转换为科学计数 */
//写了一个通用方法,突破幂数正数21位,负数7位的自动转换限制
function convertNum(num_str){ //参数必须为 字符串
//科学计数法字符 转换 为数字字符, 突破正数21位和负数7位的Number自动转换
// 兼容 小数点左边有多位数的情况,即 a×10^b(aEb),a非标准范围(1≤|a|<10)下的情况。如 3453.54E-6 or 3453.54E6
var resValue = '',
power = '',
result = null,
dotIndex = 0,
resArr = [],
sym = '';
var numStr = num_str.toString();
if(numStr[0] == '-'){ // 如果为负数,转成正数处理,先去掉‘-’号,并保存‘-’.
numStr = numStr.substr(1);
sym = '-';
}console.log(numStr)
if ((numStr.indexOf('E') != -1) ||(numStr.indexOf('e') != -1)){
var regExp = new RegExp( '^(((\\d+.?\\d+)|(\\d+))[Ee]{1}((-(\\d+))|(\\d+)))$','ig' );
result = regExp.exec(numStr);
console.log(result);
if (result != null){
resValue = result[2];
power = result[5];
result = null;
}
if (!resValue && !power){ return false}
dotIndex = resValue.indexOf('.');
resValue = resValue.replace('.','');
resArr = resValue.split('');
if(Number(power) >= 0){
var subres = resValue.substr(dotIndex);
power = Number(power);
//幂数大于小数点后面的数字位数时,后面加0
for(var i=0; i<power-subres.length; i++) {
resArr.push('0');
}
if(power-subres.length < 0){
resArr.splice(dotIndex+power, 0, '.');
}
}else{
power = power.replace('-','');
power = Number(power);
//幂数大于等于 小数点的index位置, 前面加0
for(var i=0; i<=power-dotIndex; i++) {
resArr.unshift('0');
}
var n = power-dotIndex >= 0 ? 1 : -(power-dotIndex);
resArr.splice(n, 0, '.');
}
}
resValue = resArr.join('');
console.log(sym+resValue);
return sym+resValue;
}
convertNum('3.54545E-2'); // 0.0354545
js 科学计数法 转换为 数字字符 突破幂数正数21位,负数7位的自动转换限制的更多相关文章
- [SoapUI] 重载JSONComparator比对JSON Response,忽略小数点后几位,将科学计数法转换为普通数字进行比对,在错误信息中打印当前循环的case number及其他附加信息
重载JSONComparator比对JSON Response,忽略小数点后几位,将科学计数法转换为普通数字进行比对,在错误信息中打印当前循环的case number及其他附加信息 package d ...
- js 科学计数法
function convertNum(num_str){ //参数必须为 字符串 //科学计数法字符 转换 为数字字符, 突破正数21位和负数7位的Number自动转换 // 兼容 小数点左边有多位 ...
- PHP的两个科学计数法转换为字符串的方法
不常用,所以整理在这里,分享给同行使用 方法一:取尾数法 public function NumToStr($num) { if (stripos($num, 'e') === false) retu ...
- iOS 科学计数法保留N位有效数字
iOS开发 项目中用到了将一个很大的数值转换成科学计数法的需求,转换成科学计数法的方式在iOS中其实是很好做的,使用NSNumber 的 kCFNumberFormatterScientificSty ...
- R options scipen 控制科学计数法的显示
当数字过长,R语言会自动采用科学计数法显示,测试如下 > a <- > a [] > a <- > a <- > a [] > a <- & ...
- C#实现将输入的数自动转换为科学计数法
一朋友写了一个把输入的整型或浮点数转换为科学计数法表示的算法,写好后叫我去帮他看看有没有什么bug之类的没有考虑周全.我还没有细看就已经把我吓到了----整整写了将近三百行代码.我也没说他什么,只是回 ...
- 【转】js 中导出excel 较长数字串会变为科学计数法
[转]js 中导出excel 较长数字串会变成科学计数法 在做项目中,碰到如题的问题.比如要将居民的信息导出到excel中,居民的身份证号码因为长度过长(大于10位),excel会自动的将过长的数字串 ...
- Python将科学计数法数值转换为指定精度浮点数
Python将科学计数法数值转换为指定精度浮点数 In [20]:money = 1190000.0 In [21]: traded_maket_value = 13824000000 In [22] ...
- js前端导出Excel表格后数字自动变成科学计数法问题
一般的文件导出都是后端进行导出,最近一个项目遇到导出接口挂掉了,前端实现导出的情况. 背景是vue框架,iView组件.可以直接使用exportCsv方法进行导出. 导出时进行一下行和列的切割就可以了 ...
随机推荐
- nyoj_83:迷宫寻宝(二)(计算几何)
题目链接 枚举所有墙的2n个端点与宝物的位置作为一条线段(墙的端点必定与边界重合), 求出与之相交的最少线段数(判断线段相交时用跨立实验的方法),+1即为结果. #include<bits/st ...
- Storm/JStorm之TopologyBuilder源码阅读
在Strom/JStorm中有一个类是特别重要的,主要用来构建Topology的,这个类就是TopologyBuilder. 咱先看一下简单的例子: public static void main(S ...
- ORACLE - 系统参数调整
一.内存调整 oracle 11g中,ORACLE把SGA与PGA统一管理,总和为memory_target参数的设定,也就是MAX(SGA+PGA)<= memory_target(当然可以在 ...
- Python零基础学习系列之二--Python介绍及环境搭建
1-1.Python简介: Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.Python由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年.像P ...
- oracle 修改表空间文件路径方法
比如说修改 user01.dbf 文件 的路径 1.先登录sqlplus: C:\Documents and Settings\chezh>sqlplus system/passwo ...
- Uva140 Bandwidth 全排列+生成测试法+剪枝
参考过仰望高端玩家的小清新的代码... 思路:1.按字典序对输入的字符串抽取字符,id[字母]=编号,id[编号]=字母,形成双射 2.邻接表用两个vector存储,存储相邻关系 ...
- 超超超简单的bfs——POJ-1915
Knight Moves Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 26102 Accepted: 12305 De ...
- HDOJ 6069 素数筛法(数学)
Counting Divisors Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 524288/524288 K (Java/Oth ...
- Hello BlogsPark
2017年8月4日, 今天是使用博客园的第一天, 签个到. NSLog(@"Hello BlogsPark");
- ASP.NET Core 源码学习之 Logging[4]:FileProvider
前面几章介绍了 ASP.NET Core Logging 系统的配置和使用,而对于 Provider ,微软也提供了 Console, Debug, EventSource, TraceSource ...