JAVA 关于科学计数法的解决

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA 关于科学计数法的解决相关的知识,希望对你有一定的参考价值。

有下列数字 2,0.1234,3.4E-5,0.1234,0.1234 怎么把其中的3.4E-5转成正常的数字 进行比较 然后在转回去? 具体点哦!

import java.util.Arrays;
class Animal

static String str = "3.4E-5";
static double 转换后的数 = 0;
public static void main(String[] args)


Animal animal = new Animal();
转换后的数 = animal.conversion(str);

double[] buf = 2,0.1234,转换后的数,0.1234,0.1234;
String[] ss = new String[buf.length];
Arrays.sort(buf);//从小到大排列

for(int i = 0; i < buf.length;i++)

if(buf[i] == 转换后的数)//如果是原来的科学计数,将原来的str存至ss数组

ss[i] = str;

else
ss[i] = buf[i] + "";
//打印出排列后的结果
System.out.print("比较后:" );
for(String s : ss)
System.out.print(s + " ");

//将科学计数转换成正常数字
public double conversion(String str)

String[] s = str.split("E-");
double num1 = Double.parseDouble(s[0]);
double num2 = Double .parseDouble(s[1]);
return num1 * Math.pow(10d, num2);

运行结果:比较后:0.1234 0.1234 0.1234 2.0 3.4E-5
参考技术A 首先你可以把3.4e转换成,这个主要是考你对数据类型的把握,不然不同的数据类型会算出不同的值。做完运算后,你可以再转回去啊

java 中使用BigDecimal 解决科学计数法问题

一 BigDecimal的Api

1.1 常用方法介绍

ROUND_CEILING   向正无穷方向舍入

ROUND_DOWN   向零方向舍入

ROUND_FLOOR   向负无穷方向舍入 

ROUND_HALF_DOWN  向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向下舍入, 例如1.55 保留一位小数结果为1.5 

ROUND_HALF_UP   向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,向上舍入, 1.55保留一位小数结果为1.6 

ROUND_HALF_EVEN  向(距离)最近的一边舍入,除非两边(的距离)是相等,如果是这样,如果保留位数是奇数,使用ROUND_HALF_UP ,如果是偶数,使用ROUND_HALF_DOWN

ROUND_UNNECESSARY   计算结果是精确的,不需要舍入模式

ROUND_UP   向远离0的方向舍入

案例

BigDecimal decimal = new BigDecimal("3.16974432");//1.98764432
        System.out.println(decimal);
        BigDecimal setScale = decimal.setScale(4,BigDecimal.ROUND_HALF_DOWN);
        System.out.println(setScale);

        BigDecimal setScale1 = decimal.setScale(4,BigDecimal.ROUND_HALF_UP);
        System.out.println(setScale1);

 BigDecimal 损失精度、科学计数、去除数字末位0、DecimalFormat等问题(详解)_小情歌i的博客-CSDN博客_bigdecimal科学计数法

二  解决科学计数问题

2.1 案例一

1.代码

     BigDecimal decimal = new BigDecimal("3.16974497273E9");
        System.out.println(decimal);
        BigDecimal setScale = decimal.setScale(4,BigDecimal.ROUND_HALF_DOWN);
        System.out.println(setScale);

        BigDecimal setScale1 = decimal.setScale(4,BigDecimal.ROUND_HALF_UP);
        System.out.println(setScale1);

2.结果: 

 2.2  decimal的乘法和减法

1.数据库字段设置decimal

 2.实体

 3.运算

1.四舍五入

   public BigDecimal getScienceDecimalVale(BigDecimal resultValue)
        BigDecimal setScale = resultValue.setScale(2,BigDecimal.ROUND_HALF_UP);
        logger.info("解决科学计算法:  原来值:"+resultValue+" 保留2位小数:"+setScale);
        //  String finishResult= resultValue.setScale(2, BigDecimal.ROUND_HALF_UP).toString();
        //System.out.println("解决科学计算法:"+finishResult);
        return setScale;
    

 2.相减

 3.相乘

 

以上是关于JAVA 关于科学计数法的解决的主要内容,如果未能解决你的问题,请参考以下文章

Java jxl导入excel文件,导入的数字身份证号码手机号变成了科学计数法,解决方案

java中数值类型转换的问题,double类型显示科学计数法了。

java 中使用BigDecimal 解决科学计数法问题

编写Spark的UDF函数解决Hive表大数bigintdoublefloatdecimal等转字符串string时出现的科学计数法问题Java

编写Spark的UDF函数解决Hive表大数bigintdoublefloatdecimal等转字符串string时出现的科学计数法问题Java

java代码怎么把科学计数法转换为具体数字