如何使用%运算符获得2的余数?

时间:2017-09-12 09:39:47

标签: c#

我正在尝试使用%operator

获得2倍的余数
double x = 965.606698735538;
double y = 482.803349367769;
var mod = x % y;

预期值为0

实际值是482.803349367769

有人可以帮助为什么它的行为如此奇怪。

1 个答案:

答案 0 :(得分:3)

这是二进制浮点运算的一个怪癖。

最近的(IEEE754)double到482.803349367769是482.80334936776898757671006023883819580078125

最接近%到965.606698735538​​是 965.6066987355379751534201204776763916015625

正如你所看到的,后者并不是前者的两倍;事实上,它只是不到两倍。这说明了你看到的大部分余数。

<div id="pageTitleText">[@Model.Item.Key] @if (!Model.IsUserReadonly && !Model.ReadOnlyCachesList.Contains(Model.CacheName)) { <span class="itemActions"> <a class="edit" href="@Url.Content("~/caches")/@Model.CacheName/edit?key=@Url.Encode("PICO+")">Edit</a> <a class="clone" href="@Url.Content("~/caches")/@Model.CacheName/clone?key=@Url.Encode("PICO+")">Clone</a> <a id="evictItem" class="evict" href="#">Evict</a> <a id="deleteItem" class="delete" href="#">Delete</a> </span> } </div> 与浮点参数一起使用时需要小心。