java中小数和整数乘积造成精度损失如何解决

发布于 2021-11-29 07:45:05 字数 400 浏览 848 评论 13

假如有一个小数0.1和一个整数358,那么我想要的乘积应该是35.8,但是在java程序中运行时却是35.800000000000004,那么如何才可以消除这样的精度损失。以达到其本来应该的结果。

public static void main(String [] args){
		int a = 358;
		double b = 0.1;
		System.out.println(a*b);
	}



在上面代码中的例子运行就会造成精度损失,当然,这样的整数还很多,比如像1287什么的,那么,有没有一个通用的解决这个精度损失的办法?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(13

只为守护你 2021-12-01 07:26:50

所以就不要用float 和double

伪装你 2021-12-01 07:26:50

基本类型又不是对象,咋会OOM

空城仅有旧梦在 2021-12-01 07:26:49

是个问题,涨姿势了

背叛残局 2021-12-01 07:26:48

用Decimal,然后setScale

谁的新欢旧爱 2021-12-01 07:26:34

引用来自“beyondforever68”的评论

java的话少用double,多用bigdecimal肯定没错的

绝影如岚 2021-12-01 07:16:56

java的话少用double,多用bigdecimal肯定没错的

惜醉颜 2021-12-01 07:16:06

我使用bigdecimal也还是这个问题,不知道是不是我写的有问题。

静谧 2021-12-01 07:11:30

用 BigDecimal 可以解决你的问题

躲猫猫 2021-12-01 05:59:42

偷懒的话,可以先乘10,计算后再除10

温柔少女心 2021-12-01 05:48:12

用BigDecimal计算

少女情怀诗 2021-12-01 05:29:50

java.math.BigDecimal.BigDecimal(double val) 可以看看这个方法的注释 里面有讲的

泛滥成性 2021-11-30 21:35:35

你这个不错,你的代码里面的那个358.0可以换成358也没问题。把这个BigDecimal a = new BigDecimal("1287");中的数字换成字符串也没问题。

拥有 2021-11-30 04:50:28

回复
没问题的

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文