约值处理的那些事儿
终于,我们成功的得到了一堆看起来奇形怪状、但程序的确认可的、float类型的数值了,接下来只要把数值打包出去就行了。。。才怪。
程序跑出来的float类型的值,大多数是长这样的:
4.656613E-10
0.0
2.220741E-31
4.656613E-10
2.874E-42
........
是的,各种千奇百怪的带着科学计数法中次方根(E表示以十为底数的指数,后面的E-10为10的-10次方,E-31就是10的-31次方)的数值,毕竟这玩意儿是雷达测出来的,然而我们人类实在不需要这么详细的数值(甚至不需要详细的指数规模),我们只需要前面的4.6,2.2这些数值就够了。
好的,开始进行约值处理。
约值的方法有很多,这里列出几种:
import java.math.BigDecimal;
import java.text.DecimalFormat;
/**
* java取小数点后两位小数
* @鬼月行
*
*/
public class functiom_1{
static double convert(double value){
long l1 = Math.round(value*100); //四舍五入
double ret = l1/100.0; //注意:使用 100.0 而不是 100
return ret;
}
public static void main(String[] args) {
/*
* 第一种方法 java.text.DecimalFormat
*/
DecimalFormat df = new DecimalFormat("#.##");
double d = 3.14159;
System.out.println(df.format(d));
/*
* 第二种方法 java.math.BigDecimal
*/
BigDecimal bd = new BigDecimal("3.14159265");
bd = bd.setScale(2,BigDecimal.ROUND_HALF_UP);
System.out.println(bd);
/*
* 第三种方法 convert
*/
double ret = convert(3.14159);
System.out.println(ret);
/*
* 第四种方法
*/
double db = 13.4324;
db=((int)(db*100))/100.0; //注意:使用100.0 而不是 100
System.out.println(db);
}
如果是单纯的数值取小数点后xx位的话,上面的四种方法基本够用了。但是,回到我们项目上来,我们的数值是这样的:
2.220741E-31
很尴尬的是,java里的数值默认小数是double,float形式的数值需要在数值后加上后缀符 f/F,有的时候会导致上面代码在float的数值类型下会报错,这种情况下,我们可以把它当作字符串来处理:
Float num = 4.656613E-10f;
char value_0[] = String.valueOf(num).toCharArray();//将float结果转换为字符数组
char value[] = {value_0[0],value_0[1],value_0[2]};//保留两位
String valueFinal = String.valueOf(value);//转成字符串,方便传输
约值成功,接下来就是愉快的打(搬)包(砖)环节了。