首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Modulo不工作

Modulo不工作
EN

Stack Overflow用户
提问于 2011-09-27 08:33:42
回答 5查看 5K关注 0票数 6

我知道这看起来是一个非常愚蠢的问题,但我就是不明白为什么这个问题行不通。这一点:

代码语言:javascript
复制
 System.out.println(5 % .10);

它又回来了:

代码语言:javascript
复制
0.09999999999999973

我真的不知道。我只是在学习Java,而且我对C#很在行,所以我试着用C#。C#似乎也返回了同样的东西。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-09-27 08:42:11

正如其他人解释的那样,这是由于浮点精度造成的不准确。

对于涉及小数的精确算术,您应该使用BigDecimal,在本例中为remainder method

代码语言:javascript
复制
BigDecimal number = new BigDecimal(5);
BigDecimal divisor = new BigDecimal("0.1");
BigDecimal result = number.remainder(divisor);
System.out.println(result); // 0
票数 8
EN

Stack Overflow用户

发布于 2011-09-27 08:35:47

这是由于浮点精度所致。0.10不能精确地用二进制表示。因此,结果并不完全是0.10,因此没有向下修改为0

这将适用于0.25,因为0.25 可以用精确地用二进制表示。

编辑:

通常,任何可以表示为分母为2次方的分数的数字都可以精确地表示为IEEE浮点数。(前提是没有溢出/下溢)

票数 8
EN

Stack Overflow用户

发布于 2011-09-27 08:35:28

你在做浮点运算。0.1没有与浮点数相同的精确表示。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7562949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档