我看到网上的大多数的例子中都是转成 bigDecimal,或者 string,但是再转成 double 类型之后,整数的 0 会掉。
比如说 7.00 ,用 Double.valueOf()或者用 Double.parseDouble()之后,就变成 7.0 了。
请教一下如何使整数也变成两位 double 类型的小数
1
rensuperk 2018-01-16 11:40:36 +08:00 1
1. 看 bigDecimal 提供的方法,里面有进位的规则和保留位数的参数。
2. 不建议用浮点类型进行计算。因为有误差。 3. double 带小数的整数输出也会给你截取最后的几个 0。 |
2
anthow 2018-01-16 11:42:30 +08:00 1
DecimalFormat
|
3
honeycomb 2018-01-16 11:43:58 +08:00 via Android 1
对于 double/float 而言,给它赋值 7.00 和 7.0 是没有区别的。
要关注的是输出格式( double.tostring()是可以指定格式的),比如你要求它强制输出小数点后两位,那么无论 biginteger 还是浮点数还是两者混着用都能做到。 特别的,如果你要严格保证计算精度的稳定性时(小数点第二位四舍五入,再小的位放弃),从头到尾不碰浮点数比较合适。 和数据类型没有必然关系。 |
4
vjnjc 2018-01-16 11:48:29 +08:00 1
楼上+1,在输出成 string (/display )的时候转换精度即可
|
6
jason19659 2018-01-16 12:02:31 +08:00
保存 和 输出 不要弄混
|
7
facetest 2018-01-16 12:04:12 +08:00 via Android
没那么麻烦吧,乘以 100,转成整数,再转成 double 除以 100。当然这是没有四舍五入的。
|
8
fangch OP |
9
helloit 2018-01-16 13:02:38 +08:00
DecimalFormat decimalFormat = new DecimalFormat("0.00");
String value = decimalFormat.format(xxx); |
11
fangch OP |
12
honeycomb 2018-01-16 15:12:56 +08:00
@fangch
你确定理解 @helloit 的意思了么?你确定理解了上面回答的意思了吗? " helloit 1 小时 56 分钟前 DecimalFormat decimalFormat = new DecimalFormat("0.00"); String value = decimalFormat.format(xxx); " 再看一遍,再想一想 “但是返回的是 string,把 string 转成 double 就变了” 你要的是什么? 你要的是输出为 7.00 的 float 数或者 double 所以,你先想一下什么是浮点数的概念: 浮点数实际上是一个二进制意义上的科学记数法,并且指定了小数位的精度。 比如 IEEE754 版本的浮点数的小数位是由低位的 23 个比特定义的。 所以,默认情况下,你用 toString()的意思,是让它用十进制表达这个二进制的科学计数,那么: 它只要能用 7.0 表达,就绝不会用 7.00 表示,除非你刻意地指定让它以保留两位小数的形式。 这里的刻意才是 @helloit 提到的用 DecimalFormat 的目的 |
13
honeycomb 2018-01-16 15:36:01 +08:00 via Android
@fangch
环境提供的浮点数类型的变量的精度不以你的意志为转移,所以你能考虑的精度: 要么是它的表现形式。 要么是不使用浮点数,而是用 biginteger (把 0.01 当作精度)或者你自行定义的类(这种情况下你可以任意定义这种数的特性)进行计算,表现。 |
15
grq100296 2018-01-17 08:17:52 +08:00
强制格式化
DecimalFormat df = new DecimalFormat("######0.00"); double d1 = 3.23456 double d2 = 0.0; double d3 = 2.0; df.format(d1); df.format(d2); df.format(d3); 结果 3.23 0.00 2.00 不考虑精度也可以四舍五入 |