黑马程序员技术交流社区
标题:
Java中字符串类型的数字加减报错和精度缺失的解决办法
[打印本页]
作者:
shw1072047958
时间:
2016-6-10 00:09
标题:
Java中字符串类型的数字加减报错和精度缺失的解决办法
编码中加减乘除经常遇到,稍有不适,友谊的小船说翻就翻。
Demo来一发,做做记录:
[java]
view plain
copy
print
?
//保留两位小数
private DecimalFormat decimalFormat = new DecimalFormat("0.00");
//保留两位小数 private DecimalFormat decimalFormat = new DecimalFormat("0.00");
[java]
view plain
copy
print
?
String str1="0.01";
String str2="0.09";
//转化为Double类型数值相加减,精度不会缺失
double sum = Double.parseDouble(str1) + Double.parseDouble(str2);
LogUtil.d("sum", sum + ""); //打印结果 sum=0.09999999999999999
String formatTitle = decimalFormat.format(sum);
LogUtil.d("formatum", formatTitle); //打印结果 formatTitle=0.10
String str1="0.01"; String str2="0.09"; //转化为Double类型数值相加减,精度不会缺失 double sum = Double.parseDouble(str1) + Double.parseDouble(str2); LogUtil.d("sum", sum + ""); //打印结果 sum=0.09999999999999999 String formatTitle = decimalFormat.format(sum); LogUtil.d("formatum", formatTitle); //打印结果 formatTitle=0.10
其中主要用到了DecimalFormat 这个类,它是 NumberFormat 的一个具体子类,用于格式化十进制数字。
Demo示例:
[java]
view plain
copy
print
?
DecimalFormat df1 = new DecimalFormat("0.0");
DecimalFormat df2 = new DecimalFormat("#.#");
DecimalFormat df3 = new DecimalFormat("000.000");
DecimalFormat df4 = new DecimalFormat("###.###");
LogUtil.d("sum",df1.format(12.34)); //打印结果 sum: 12.3
LogUtil.d("sum",df2.format(12.34)); //打印结果 sum: 12.3
LogUtil.d("sum",df3.format(12.34)); //打印结果 sum: 012.340
LogUtil.d("sum",df4.format(12.34)); //打印结果 sum: 12.34
DecimalFormat df1 = new DecimalFormat("0.0"); DecimalFormat df2 = new DecimalFormat("#.#"); DecimalFormat df3 = new DecimalFormat("000.000"); DecimalFormat df4 = new DecimalFormat("###.###"); LogUtil.d("sum",df1.format(12.34)); //打印结果 sum: 12.3 LogUtil.d("sum",df2.format(12.34)); //打印结果 sum: 12.3 LogUtil.d("sum",df3.format(12.34)); //打印结果 sum: 012.340 LogUtil.d("sum",df4.format(12.34)); //打印结果 sum: 12.34
以下摘自百度百科:
DecimalFormat 包含一个模式 和一组符号
符号含义:
0 一个数字
# 一个数字,不包括 0
. 小数的分隔符的占位符
, 分组分隔符的占位符
; 分隔格式。
- 缺省负数前缀。
% 乘以 100 和作为百分比显示
? 乘以 1000 和作为千进制货币符显示;用货币符号代替;如果双写,用国际货币符号代替。如果出现在一个模式中,用货币十进制分隔符代替十进制分隔符。
X 前缀或后缀中使用的任何其它字符,用来引用前缀或后缀中的特殊字符。
作者:
毅往志乾
时间:
2016-6-10 00:31
怒赞!我用力顶到十个字符
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2