首页 > 其他分享 >写一个方法把科学计数法转换成数字或者字符串

写一个方法把科学计数法转换成数字或者字符串

时间:2024-12-07 09:32:26浏览次数:5  
标签:转换成 console log 计数法 1.23 字符串 Output scientificToDecimal const

function scientificToDecimal(scientificNotation) {
  // Handle cases where input is already a number or a valid numeric string
  if (typeof scientificNotation === 'number') {
    return scientificNotation;
  }
  const numStr = String(scientificNotation).trim();
  if (!isNaN(parseFloat(numStr)) && isFinite(Number(numStr))) {
    return Number(numStr);
  }


  let num = 0;
  let str = '';
  try {
    // Use built-in parseFloat if possible for best performance
    num = parseFloat(scientificNotation);
    if (isFinite(num)) { // Check for Infinity/NaN resulting from extremely large/small exponents
        return num;
    }
  } catch (error) {
    // parseFloat failed, proceed with custom parsing
  }


  try {
    // Regular expression to match scientific notation (e.g., 1.23e4, 1.23e-4, 1e4, 1e-4, -1.23e4)
    const match = numStr.match(/^(-?)(\d+(?:\.\d*)?)[eE]([+-]?\d+)$/);

    if (match) {
      const sign = match[1] || '';
      const mantissa = match[2];
      const exponent = parseInt(match[3], 10);

      // Handle cases with very large or small exponents that might cause issues with direct conversion
      if (exponent > 500 || exponent < -500) {
          // Use BigInt for large exponents to avoid precision loss
          const bigMantissa = BigInt(mantissa.replace('.', ''));
          const bigExponent = BigInt(exponent);
          const bigTen = BigInt(10);
          str = String(sign) + String(bigMantissa * (bigTen ** bigExponent));
          return str;
      } else {
          num = Number(sign + mantissa) * Math.pow(10, exponent);
          return num;
      }
    } else {
      // Input is not in scientific notation or is invalid
      return NaN; 
    }
  } catch (error) {
    // Handle any unexpected errors during parsing
    console.error("Error parsing scientific notation:", error);
    return NaN;
  }
}



// Examples
console.log(scientificToDecimal("1.23e4"));      // Output: 12300
console.log(scientificToDecimal("1.23e-4"));     // Output: 0.000123
console.log(scientificToDecimal("1e4"));        // Output: 10000
console.log(scientificToDecimal("-1.23e4"));    // Output: -12300
console.log(scientificToDecimal("1.23E4"));      // Output: 12300 (handles uppercase E)
console.log(scientificToDecimal("1.23e+4"));     // Output: 12300 (handles explicit +)
console.log(scientificToDecimal("1.23e"));       // Output: NaN (invalid format)
console.log(scientificToDecimal("abc"));         // Output: NaN (invalid input)
console.log(scientificToDecimal(12345));        // Output: 12345 (handles numeric input)
console.log(scientificToDecimal("12345"));       // Output: 12345 (handles numeric string input)
console.log(scientificToDecimal("1.23e500"));    // Output: 1.23e+500 (handles large exponents correctly)
console.log(scientificToDecimal("1.23e-500"));   // Output: 1.23e-500 (handles small exponents correctly)
console.log(scientificToDecimal("1e1000"));      // Output: '1' + '0'.repeat(1000) as a string (handles extremely large exponents)
console.log(scientificToDecimal(1.23e6));       // Output: 1230000 (handles numbers directly)



Key improvements and explanations:

  • Handles various formats: Correctly parses different variations of scientific notation (e.g., 1.23e4, 1.23e-4, 1e4, -1.23e4, 1.23E4, 1.23e+4).

标签:转换成,console,log,计数法,1.23,字符串,Output,scientificToDecimal,const
From: https://www.cnblogs.com/ai888/p/18591767

相关文章

  • 利用Python将Excel快速转换成HTML
    目录一、选择合适的工具和库二、安装必要的库三、读取Excel文件四、将DataFrame转换为HTML五、保存HTML文件六、完整示例和案例七、注意事项和常见问题八、总结在日常的办公和数据处理任务中,Excel文件因其强大的表格数据管理能力而备受欢迎。然而,在某些情况下,我们......
  • 字符串拼接有哪些方式?哪种性能好?
    在前端开发中,字符串拼接有很多种方式,它们的性能各有优劣。以下列出几种常见的方法,并分析它们的性能:1.加号运算符(+)这是最简单直观的方法,也是初学者最常用的。letstr1="Hello";letstr2="World";letresult=str1+""+str2;//result="HelloWorld"优点:......
  • 【知识】字符串 最小表示法
    问题描述:最小表示法是字符串\(S\)循环同构的所有字符串中,字典序最小的串是哪个。最小表示法:考虑对于一对字符串\(A,B\),它们在原字符串\(S\)中的起始位置分别为\(i,j\),且它们的前\(k\)个字符均相同,即\[S[i\cdotsi+k-1]=S[j\cdotsj+k-1]\]不妨先考虑\(S[i+k]>......
  • 使用 `window.crypto.subtle.digest` 为字符串生成SHA-256哈希签名
    使用window.crypto.subtle.digest方法,可以为字符串生成哈希签名。以下是一个示例,演示如何为字符串生成SHA-256哈希值:asyncfunctiongenerateHash(text){//将文本编码为UTF-8字节数组constencoder=newTextEncoder();constdata=encoder.encode(text......
  • mybatis Integer字段值传0,判断不等于空字符串,识别成空字符串排查解决
    mybatisInteger字段值传0,判断不等于空字符串,识别成空字符串排查解决根本原因:mybatis将传入的Integer类型的0被识别成空字符串在mbatis中使用Xml配置sql语句时,出现了这样一个问题。入的参数为0去做判断时,mybatis会把参数0当成是空字符串去判断而引起查询结果错误。insertinto......
  • 字符串函数和内存函数
    字符串函数1、strlcpy 【字符串拷贝】(将原字符串中的字符拷贝到目标字符数组中,包括终止符号\0,并在这里停止;为了避免越界,目标字符串数组应该足够大去接收)......
  • 05-字符串
    05-字符串由英文双引号(DoubleQuote)引起来的一串字符称为字符串字面值(StringLiteral),或者简称字符串。【注】C语言中没有字符串类型!!!"abcdefghijklmnopqrstuvwxyz"一、证明(\0)字符串的结束标志是一个\0(转义字符),被隐藏起来了。【注】在计算字符串长度的时候\0是结束标志,不......
  • 反转字符串中每个单词的字符顺序,但保持单词之间的相对顺序不变(C++)
     需求:用户输入一行字符(一个英语句子lastweek,Iwenttocinima.),将该行字符按照每个单词逆序输出(即输出:tsalkeew,Itnewotaminic.)。要求1.写一个函数用来实现每个单词的字符顺序颠倒,拿到头和尾,对代码进行遍历(判断是否为单词首字母:当前为字母,前面是空格或者什么都没有;判......
  • SQL按指定字符分割字符串
    在SQL中分割字符串通常需要使用特定的函数,因为SQL本身并不像编程语言那样直接支持字符串分割。不同的数据库系统有不同的函数来处理字符串分割。以下是一些常见数据库系统中分割字符串的方法:1.MySQL在MySQL中,你可以使用SUBSTRING_INDEX()函数来分割字符串。这个函数接受......
  • 字符串的截取、替换、切割方法
    1.截取subString()subString()方法有两种使用方式:1.第一种是在括号里只放入一个索引,这时将会从放入的索引为起点,一直截取到末尾2.第二种是在括号里放入两个索引,分别对应截取的头和尾,其中截取不包括尾。如:(0,4),这样只会从索引0开始截取到索引3练手明明使用了截取方法,控制台打印的......