JS将科学计数法转换成数据值的⽅式  (⼀)科学计数法的类型是数值类型
  1、指数是正数
与空字符直接相加
let eformat = 1.34e5
let number = '' + eformat 或者 eform + ''
console.log('结果是:',number)
结果是:134000
调⽤toString()⽅法
let eformat = 1.34e5
let number = String()
console.log('结果是:',number)
结果是:134000
  2、指数是负数
若指数值是⼤于或者等于-6的话,那么可以通过上⾯两种⽅法来求解
若指数值是⼩于-6的话,那么就需特殊处理了,请见下⾯⽰例函数:
let eformat = 1.34e-7
let number = eformat
let tmpVal = '' + eformat
let ee = place(/[\d.-]/g, '')if (ee) {
if (ee === 'E' || ee === 'e') {
let pos = tmpVal.indexOf('E')
if (pos === -1) {
pos = tmpVal.indexOf('e')
}
console.log('pos:', pos)
let power = tmpVal.substr(pos + 1)
console.log('power:', power)
if (power === '') {
let baseValue = tmpVal.substr(0, pos)
number = baseValue
// 不调⽤Number函数了,防⽌转换为科学计数法了
} else {
let baseValue = tmpVal.substr(0, pos)
let character = power.substr(0, 1)if (character === '-') {
let times = power.substr(1)
if (times === '' || times === '0') {
number = baseValue
// 不调⽤Number函数了,防⽌转换为科学计数法了
} else {
times = Number(times)
let baseValueLength = baseValue.length
let floatLength = baseValue.indexOf('.') + 1
let length = baseValueLength - floatLength
number = Fixed(length + times)
// 这⾥只能以字符串形式输出了,不能再调⽤Number函数
}
} else {
let powerVal = Math.pow(10, power)
number = baseValue * powerVal
}
}
}
}
console.log('结果是:', number) // 结果是: 0.000000134
  其实,上述的处理过程适⽤于所有的场景,不过处理过程还是有点繁琐,可以继续往后查看,会有更简单的处理⽅式。
  (⼆)科学计数法的类型是字符串类型
   1、指数是正数
let eformat = '1.34e7'
let number = parseFloat(eformat)
console.log('结果是:', number) //13400000
  此时,直接通过parseFloat函数来处理即可。
  2、指数是负数
指数值⼤于或者等于-6,那么可以直接通过parseFloat函数来处理
指数值⼩于-6的情况,可以参考(⼀)中指数值是⼩于-6的情况的处理过程,不过⾸先需要通过parseFloat函数进⾏转换处理,然后再调⽤上述的处理流程
  (三)改进的⽅式
function transferToNumber(inputNumber ){
if (isNaN(inputNumber)) {
return inputNumber
}
inputNumber = '' + inputNumber
inputNumber = parseFloat(inputNumber)
let eformat = Exponential() // 转换为标准的科学计数法形式(字符串)
let pos = eformat.indexOf('e')
let baseValue = eformat.substr(0, pos)
let power = eformat.substr(pos + 1)
let bitNumber = 0
pos = baseValue.indexOf('.')
if (pos === -1) {
bitNumber = 0 - power
} else {
let float = baseValue.substr(pos + 1)
bitNumber = float.length - power
}
let number = Fixed(Math.max(0, bitNumber))
return number
}
  ⽀持所有的场景转换处理。
  (四)优秀的⽅式
function transferToNumber(inputNumber) {
if (isNaN(inputNumber)) {
return inputNumber
}
inputNumber = '' + inputNumber
inputNumber = parseFloat(inputNumber)
let eformat = Exponential() // 转换为标准的科学计数法形式(字符串)js正则表达式验证数字和字母
let tmpArray = eformat.match(/\d(?:\.(\d*))?e([+-]\d+)/) // 分离出⼩数值和指数值
let number = Fixed(Math.max(0, (tmpArray[1] || '').length - tmpArray[2]))
return number
}
  上述处理流程⽀持Number和String类型的科学计数法数值,利⽤toExponential()函数来将输⼊数值进⾏科学计数法标准处理,并且以⼩写的字母e表⽰和正、负号,同时该函数也⽀持⼀个整型的输⼊参数,表⽰保留的⼩数位数,并且⽀持四舍五⼊;toFixed()函数也⽀持四舍五⼊;此外,这⾥还主要利⽤match函数和正则表达式,获取到⼩数位的长度和指数值,例如:
  '1.34e-7'.match(/\d(?:\.(\d*))?e([+-]\d+)/) 的结果是:["1.34e-7", "34", "-7"]
  '1.34e+7'.match(/\d(?:\.(\d*))?e([+-]\d+)/) 的结果是:["1.34e+7", "34", "+7"]
  备注: match() ⽅法将检索字符串 String Object,以到⼀个或多个与 regexp 匹配的⽂本。这个⽅法的⾏为在很⼤程度上有赖于regexp 是否具有标志 g。如果 regexp 没有标志 g,那么 match() ⽅法就只能在 stringObject 中执⾏⼀次匹配。如果没有到任何匹配的⽂本, match() 将返回 null。否则,它将返回⼀个数组,其中存放了与它到的匹配⽂本有关的信息。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。