js 科学计数法 转换为 数字字符 突破幂数正数21位,负数7位的自动转换限制

前天工作中要转换后台返回的一个数据,返回是的科学计算的数字字符,用网上能搜索到的常用两种方法转换会有倍数的限制,然后又搜索了很久,还是没有找到好的方法,虽然也有一些自己写的方法,可还是不能像下面两种方法一样能正常转换各种正负科学计数,且突破幂数正数21位,负数7位的自动转换限制。所以对比了下,花一下午修改测试,基本通用了,只是传入的参数必须为字符串的科学计数。

var num = new Number(‘3.54545E-3‘);  // 3.54545e-7var 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
时间: 2024-10-06 15:56:55

js 科学计数法 转换为 数字字符 突破幂数正数21位,负数7位的自动转换限制的相关文章

Java把科学计数法转换为字符串

/**  * 把科学计数法转换为字符串  * 1.64607507E8(转化为164607507).1.6.0.0.0  * @param str  * @return  */ private static String number2PlainString(String str){ BigDecimal bd = new BigDecimal(str); return bd.toPlainString(); }

PHP的两个科学计数法转换为字符串的方法

不常用,所以整理在这里,分享给同行使用 方法一:取尾数法 public function NumToStr($num) { if (stripos($num, 'e') === false) return $num; $num = trim(preg_replace('/[=\'"]/', '', $num, 1), '"'); //出现科学计数法,还原成字符串 $result = ""; while ($num > 0) { $v = $num - floo

Excel科学计数法转换为文本(转载)

excel中的科学计数法有时候会带来意想不到的麻烦.特别是从网页上复制过来的数据粘贴到自己的表中时变成了科学计数法的形式,处理起来很麻烦.今天看到了一个简单的方法,将数据转换成文本,而且末位不会丢失. 方法一:选定数据区域,点击“数据→分列→下一步→下一步→文本→完成”.(简单好用) 方法二:1.先把excel表格设置为文本格式.         2.复制过来粘贴时,右键选项"选择性粘贴"-->文本:         3.如果是 Excel2003,粘贴过来时,单元格右下有个选项

js科学计数法问题

//科学计数法转换function getFullNum(num) { //处理非数字 if (isNaN(num)) { return num }; //处理不需要转换的数字 var str = '' + num; if (!/e/i.test(str)) { return num; }; return (num).toFixed(18).replace(/\.?0+$/, "");} 原文地址:https://www.cnblogs.com/lindaCai/p/8695791.h

关于JS数学计算精度不准和自动转科学计数法的问题

在javaScript中,数学计算是一个很坑爹的问题, 由于系统二进制转十进制的误差,导致浮点数的运算精度很不理想,经常会出现一些意想不到的问题. 而js自动将小数转为科学计数法的问题,也让一些自己写数学插件的同学痛苦不已. 第一个,浮点数计算精度: 比如:1.2*3 = 3.599999999.... 解决办法: ⑴将浮点数乘以10的n次幂化为整数,再进行计算,之后再除以10的n次幂,就可以得到我们想要的数值.即:1.2*3 = 12*3/10 = 3.6;(n为小数点后数位之和); 至于多个

PHP 如何显示大数字,防止显示为 科学计数法 形式

PHP 数字超过一定长度时,会自动转换为 科学计数法 的形式,如 1.2345678912346E+16: 如何 避免转换,让它原样展示呢? 不过,可以用PHP函数 number_format() 来格式化数字,参考代码如下: $str = number_format(123456789123456789123456, 0, '', ''); print_r($str); 原样输出: 123456789123456789123456 延伸阅读: PHP保留2位小数 格式化小数.浮点数

Android Sqlite 读取数据99999.99变为100000.00,出现科学计数法

问题描述: 将99999.99存入Sqlite数据库,类型为DECIMAL(6,3).通过cursor.getString()变为100000.00 且存储亿位数据时:cursor.getString()会出现异常,或直接转换为科学计数法 解决方案: 1.针对Sqlite数据类型进行读取(即使Sqlite无类型),DECIMAL类型用cursor.getDouble(). 2.不要对Sqlite设置类型,全用text.关于怎么更改Sqlite表结构,列属性可以看我下一篇文章 错误原因: 我猜可能

如何使java中double类型不以科学计数法表示

在java中,把一个double或者BigDecimal的小数转换为字符串时,经常会用科学计数法表示,而我们一般不想使用科学计数法,可以通过:DecimalFormat a = new DecimalFormat("#,##0.00000000");        System.out.println(a.format(11111111.0000001000000001));的方式来格式化输出字符串. 对于BigDecimal的小数,如果制定精度<=6, 则可以放心的使用其toS

sqlserver中float转varchar时不显示科学计数法

MSSQL中 float转换为varchar 变成科学计数法解决方案 在系统初始化的时候,因为有同事,没有在数值型的数据前面加上 单引号,导致进入数据库后都变成float型我们需要做以下转换就能将数据变为 varchar类型 declare @a float //定义一个float变量set @a =13824658956 //赋值float变量select @a as a //显示变量select convert(varchar(25),@a) as a //按字符串显示select conv