关于Double变量转字符串(不用科学计数法表示)的方法。
Double类型的变量在区间(负一千万,正一千万)中是正常显示的, 无小数部分时默认带一位小数,如:
9999999—>9999999.0
10000000—>1.0E7
10000000.1—>1.00000001E7
想让Double变量无论是什么数值都不使用科学计数法表示,那么只能将此值转换为字符串形式,当然也不是直接用String.valueOf(Double target)
来转换,而是采用以下的方法:
- 先将Double类型转换成String类型
- 再将String类型转换成BigDecimal类型
- 再将BigDecimal类型转换成String
注意!!!
不能直接将Double类型转换成BigDecimal类型,否则会因为精度问题造成数值偏差。
一定要按照Double—>String—>BigDecimal—>String路线走。
下面是示例代码:
//创建Double变量target并完成初始化
Double target = new Double(10000000.1);
//将Double变量target转换成字符串temporary
String temporary = String.valueOf(target);
//将字符串temporary转换成BigDecimal变量bigDecimal
BigDecimal bigDecimal = new BigDecimal(temporary);
//将BigDecimal变量bigDecimal转换成字符串result
String result = String.valueOf(bigDecimal);
最后来一个小题目:如何判断Double类型变量的值中的小数部分超过两位?
思路:
- 先将Double变量转换成String变量(不用科学计数法表示)
- 将该String变量以小数点进行分割,并将分割后的各部分用数组保存起来
- 对数组进行相应的判断,即可得到结果。
话不多说,直接上代码。
//创建Double变量target并完成初始化
Double target = new Double(10000000.111);
//将Double变量target转换成字符串temporary
String temporary = String.valueOf(target);
//将字符串temporary转换成BigDecimal变量bigDecimal
BigDecimal bigDecimal = new BigDecimal(temporary);
//将BigDecimal变量bigDecimal转换成字符串result
String result = String.valueOf(bigDecimal);
//将String变量以小数点进行分割,并将分割后的各部分用数组保存起来,注意小数点符号需要转义处理
String[] judgeArray = result.split("\.");
//对该字符串数组进行判断,若数组含有超过一个元素,并且第二个元素的长度大于2,则表明该Double类型变量的值中的小数部分超过两位
if (judgeArray.length > 1 && judgeArray[1].length() > 2) {
System.out.println("该Double类型变量的值中的小数部分超过两位");
}
关于String.split(String regex)方法,值得注意的是:
在以“|”或者“.”或者“+”或者“*”进行分割时,要对它们进行转义处理,即要使用String.split("\.")
和String.split("\|")
和String.split("\+")
和String.split("\*")
等进行分割,不能使用String.split(".")
和String.split("|")
和String.split("+")
和String.split("*")
等进行分割。