java double b = 0.333 , 乘以100 以后小数位变多;

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java double b = 0.333 , 乘以100 以后小数位变多;相关的知识,希望对你有一定的参考价值。

double d = 0.333;
System.out.println(d*100);

结果是 33.300000000000004 小数位怎么多了

double 是双精度类型,也就是说你的d是double,而你的d*100中的100是整形(int)。这是自动类型转换
符合以下条件时java将会做自动类型转换:
(1)转换前的数据类型与转换后的类型兼容。
(2)转换后的数据类型的表示范围比转换前的类型大。
其中double的表示范围比int大,符合条件(2)。因此java会自动将原来为int的类型的变量100转换为double类型。追问

多谢回答,采纳时 还没有你的答案。

追答

没什么,大家相互学习就好

参考技术A 这是精度问题,计算机一般的浮点计算都有精度,你就取小数点后几位来就行了 参考技术B 你可以转下类型
double d = 0.333;
System.out.println((float)(d*100));本回答被提问者采纳

java下double相乘精度丢失问题

比如

System.out.println(0.14*100);

输出: 14.000000000000002

 

解决方法:

BigDecimal b = new BigDecimal(String.valueOf(0.14));
        BigDecimal c = new BigDecimal(String.valueOf(100));
        System.out.println(b.multiply(c));
        System.out.println(b.multiply(c).intValue());
        System.out.println(b.multiply(c).doubleValue());

输出: 

14.00
14
14.0

以上是关于java double b = 0.333 , 乘以100 以后小数位变多;的主要内容,如果未能解决你的问题,请参考以下文章

用C语言如何实现 输入一个double 类型的数后 使该数保留小数点后两位 对第三个数进行四舍五入处理

java中变量a是double型的。怎么判断a是不是为null

在 2d numpy 中求和行 [重复]

Keras - 整个训练过程中的 Loss Nan 和 0.333 准确率

SSE2 双倍乘法比标准乘法慢

java.运算符