好吧,这应该是一个相当简单的问题,但我不能得到这个权利。我有一个累计金额返回一倍。这些代表的百分比,它不应该是0.0 ..所以我想用d%1保持在1以下。工作罚款为2.13成为0.13,或2.98成为0.98,但3.0成为0.0不是1.0(100%)..保持双倍最大值为1.0
我明显在做一些根本性错误吗?或者我只是欺骗,并说如果0然后1?
由于
好吧,这应该是一个相当简单的问题,但我不能得到这个权利。我有一个累计金额返回一倍。这些代表的百分比,它不应该是0.0 ..所以我想用d%1保持在1以下。工作罚款为2.13成为0.13,或2.98成为0.98,但3.0成为0.0不是1.0(100%)..保持双倍最大值为1.0
我明显在做一些根本性错误吗?或者我只是欺骗,并说如果0然后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);
}
如果你的总和可以是负的,然后如果1.0
也不想与ceil
if
和副楼(总和)始终如果你知道目标总
percentage=sum/whole_sum);
%为模运算符
维基百科:
“在计算中,该模运算发现由另一人数的除法(有时称为模数)后的余数”
换言之,3模1 = 0,因为3除1后的余数为零。
模数表现如预期 - 当3.0除1.0时没有余数。
如果你要处理没有剩余的特殊情况:
d %= 1.0
d = d == 0.0 ? 1.0 : d;
2.0给你什么?我不完全明白你在做什么。作为一般规则,在Java中进行数学运算时使用BigDecimal。 – jmf1205 2015-03-19 05:36:46
2%1 = 0 ..它是一个小数运行列表,但每次遇到一个整数时,我希望它导致1如此1,2,3,...,n = 1,1,1,1。 1.1,2.1,...,n.1 = 0.1,0.1等 – mythstified 2015-03-19 05:49:49
你想要'0%1' =>'1'吗? – 2015-03-19 06:14:49