保持双倍最大为 1.0
Keep a double at a max of 1.0
好的,这应该是一个相当简单的问题,但我做错了。我有一个返回双倍的累计和。这些代表百分比,它永远不应该是 0.0.. 所以我想使用 d % 1 来保持在 1 以下。适用于 2.13 变成 0.13,或者 2.98 变成 0.98,但是 3.0 变成 0.0 而不是 1.0 (100%)..
我显然在做一些根本性的错误?或者也许我只是作弊说 if 0 then 1?
谢谢
% 是模运算符
来自维基百科:
"In computing, the modulo operation finds the remainder after division of one number by another (sometimes called modulus)"
换句话说,3 模 1 = 0,因为 3 除以 1 后的余数为零。
模数符合预期 - 3.0 除以 1.0 没有余数。
如果要处理无余数的特殊情况:
d %= 1.0
d = d == 0.0 ? 1.0 : d;
当累积(百分比)总和达到 1.0 (100%) 边界时
- 为什么要设置为
sum=sum%1
?
- 如果意思是某个操作的百分比那么它不应该还是
1.0
吗?
所以在总结的时候我会做这样的事情:
for (...)
{
// some stuff of yours
sum+=...;
if (sum>1.0) sum=1.0;
}
如果你仍然需要模数 1 那么你可以利用 floor
- 但是那个操作对我来说没有任何意义(除了脉动进度条)
除非这笔款项用于其他用途,否则我认为
for (...)
{
// some stuff of yours
sum+=...;
if (sum>1.0) sum-=floor(sum);
}
如果您的总和可以为负数,则使用 ceil
分别处理负值
- 如果
1.0
也不需要,则忽略 if
并始终减去 floor(sum)
如果你知道目标总和
- 如果总和代表进度状态
- 并且您知道最后一个值(总和)
- 然后
percentage=sum/whole_sum);
x/(x+a)
或 1-exp(-ax)
呢?
好的,这应该是一个相当简单的问题,但我做错了。我有一个返回双倍的累计和。这些代表百分比,它永远不应该是 0.0.. 所以我想使用 d % 1 来保持在 1 以下。适用于 2.13 变成 0.13,或者 2.98 变成 0.98,但是 3.0 变成 0.0 而不是 1.0 (100%)..
我显然在做一些根本性的错误?或者也许我只是作弊说 if 0 then 1?
谢谢
% 是模运算符
来自维基百科:
"In computing, the modulo operation finds the remainder after division of one number by another (sometimes called modulus)"
换句话说,3 模 1 = 0,因为 3 除以 1 后的余数为零。
模数符合预期 - 3.0 除以 1.0 没有余数。
如果要处理无余数的特殊情况:
d %= 1.0
d = d == 0.0 ? 1.0 : d;
当累积(百分比)总和达到 1.0 (100%) 边界时
- 为什么要设置为
sum=sum%1
? - 如果意思是某个操作的百分比那么它不应该还是
1.0
吗? 所以在总结的时候我会做这样的事情:
for (...) { // some stuff of yours sum+=...; if (sum>1.0) sum=1.0; }
- 为什么要设置为
如果你仍然需要模数 1 那么你可以利用 floor
- 但是那个操作对我来说没有任何意义(除了脉动进度条)
除非这笔款项用于其他用途,否则我认为
for (...) { // some stuff of yours sum+=...; if (sum>1.0) sum-=floor(sum); }
如果您的总和可以为负数,则使用
ceil
分别处理负值
- 如果
1.0
也不需要,则忽略if
并始终减去 floor(sum)
如果你知道目标总和
- 如果总和代表进度状态
- 并且您知道最后一个值(总和)
- 然后
percentage=sum/whole_sum);
x/(x+a)
或 1-exp(-ax)
呢?