java科学计数法转换成double_如何实现将java中Double类型的科学计数法转换为指定格式显示?...

1.转为指定格式显示:

/**

* 将double类型的科学计数法转换成指定格式的正常字符串

* start 转换double类型的格式为:两位小数

* @param d

* @return String

* @author ljp

*/

public static String formatToTwo(double d) {

DecimalFormat a = new DecimalFormat("#,##0.00");

String frmStr = a.format(d);

return frmStr;

}

2.对于位数不大,不是科学计数法的字符串类型,如果位数不足两位的数字,自动添0至两位:

public static String formatToTwo(String frmStr) {

String[] frmStrArray = null;

if (frmStr.contains(".")) {

frmStrArray = new String[2];

frmStrArray[0] = frmStr.substring(0, frmStr

.indexOf("."));

frmStrArray[1] = frmStr.substring(frmStr

.indexOf(".") + 1, frmStr.length());

}

if (frmStrArray != null && 1 < frmStrArray.length) {

String firStr = frmStrArray[0];

String secStr = frmStrArray[1];

if (secStr != null && 2 > secStr.length()) {

int secStrLen = secStr.length();

if (secStrLen == 1) {

secStr = secStr + "0";

}

if (secStrLen == 0) {

secStr = "00";

}

}

frmStr = firStr + "." + secStr;

} else {

frmStr = frmStr + ".00";

}

return frmStr;

}

注:

在java中,把一个double或者BigDecimal的小数转换为字符串时,经常会用科学计数法表示,而我们一般不想使用科学计数法,可以通过:

DecimalFormat a = new DecimalFormat("#,##0.00000000");

System.out.println(a.format(11111111.0000001000000001));

的方式来格式化输出字符串。

对于BigDecimal的小数,如果制定精度<=6, 则可以放心的使用其toString函数。但是对于>6的精度,有可能会使用科学计数法,查看器代码有如下判断:

long adjusted = -(long)scale + (coeff.length-1);

if ((scale >= 0) && (adjusted >= -6)){

非科学计数法的toString.

}

其中scale指BigDecimal的精度,

coeff对应使用BigInteger存储的值的toString字符串, coeff = intVal.abs().toString().toCharArray(),也就是说BigDecimal在对应精度下的整数值,例如BigDecimal ob = new BigDecimal(0.00000011), ob的精度为7, 则coeff="1";如果ob=new BigDecimal(0.10000011), 则coeff="1000001";如果ob=new BigDecimal(0.00000001), 则coeff="0";

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值