好的,这应该是一个相当简单的问题,但我无法做到这一点。我有一个累积的总和,它返回了一个双倍。这些代表百分比,它永远不应该是0.0 ..因此我认为使用d%1来保持1以下。工作正常2.13变为0.13,或2.98变为0.98,但3.0变为0.0而不是1.0(100%).. < / p>
我显然在这里做了一些根本错误的事情?或者我只是作弊并说是0然后1?
由于
答案 0 :(得分:2)
%是模数运算符
来自维基百科:
&#34;在计算中,模运算找到一个数除以另一个数后的余数(有时称为模数)&#34;
换句话说,3 modulo 1 = 0,因为将3除以1后的余数为零。
答案 1 :(得分:1)
模数表现如预期 - 将3.0除以1.0时没有余数。
如果你想处理没有余数的特殊情况:
d %= 1.0
d = d == 0.0 ? 1.0 : d;
答案 2 :(得分:1)
累积(百分比)总和达到1.0(100%)边界
sum=sum%1
?1.0
?所以在总结的时候我会做这样的事情:
for (...)
{
// some stuff of yours
sum+=...;
if (sum>1.0) sum=1.0;
}
如果您仍然需要模数1,那么您可以利用楼层
除非将总和用于其他事情,否则我认为
for (...)
{
// some stuff of yours
sum+=...;
if (sum>1.0) sum-=floor(sum);
}
如果您的金额为负数,则可以使用ceil
1.0
也不需要,则忽略if
并且总是低于地板(总和)如果您知道目标总和
percentage=sum/whole_sum);
答案 3 :(得分:1)
x/(x+a)
或1-exp(-ax)
怎么样?