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类型显示科学计数法了。
编写Spark的UDF函数解决Hive表大数bigintdoublefloatdecimal等转字符串string时出现的科学计数法问题Java
编写Spark的UDF函数解决Hive表大数bigintdoublefloatdecimal等转字符串string时出现的科学计数法问题Java