工作中遇到了要将字符串转换成long型数据的问题,一开始如果只是一个整形的字符串,我用Long.valueof(String s)就可以了,最后数据出现了12.23之类的数据,这时就要转换成Double或者float类型的数据了。
还有就是遇到一个需要将字符串拆分的问题,比如12.25KB/s 我要将他存储到数据库当中,数据库当中使用Double数据,因为以后要运用到图表当中去,所以必须使用Double而不能使用String类型将KB/s存储进去,这时就要用到一个字符串拆分方法,并且由于有KB,有MB最终存储到数据库的时候统一换算成MB, 并且保留三位小数,方法如下
/**
* 全部解析为以MB为单位
*
* @param rateFlow 要解析的网络流速(12.54KB/s ,1.2MB/s)
* @return 返回String类型的数据(0.0125 ,1.2000)
*/
public String parseRateFlow(String rateFlow) {
int i = 0;
int scale = 1;// 这里写成0,出了错误,debug解决
char character = rateFlow.charAt(i);
while ((character >= '0' && character <= '9') || character == '.') {
i++;
character = rateFlow.charAt(i);
}
if (rateFlow.charAt(i + 1) == 'K') {
scale = 1024;
}
String resultStr = rateFlow.substring(0, i);
DecimalFormat df2 = new DecimalFormat("###.000");
return df2.format(Double.valueOf(resultStr) / scale);
}
返回的还是String,后面再次利用Double.valueOf()方法就可以转换过来了。
具体这几个方法比如valueOf还有保留小数的DecimalFormat是怎么实现的,都是可以看看源码的。
Method One:
这样计算可以保留result_value小数点后四位,以此类推,1后面几个零就是保留小数点后几位数.
Method two:
DecimalFormat df = new DecimalFormat("###.00");
System.out.println(df.format(double_value));
这样就是保留小数点后两位小数,如果想保留三位,则为
DecimalFormat df = new DecimalFormat("###.000");
Math.round()方法就是四舍五入的取整方法