我在我们正在使用的一个框架中找到了以下代码,
if (nValue + 0.01 > nLimit)
nValue = nValue - 0.01;
if (((nValue+1) / (int)(nValue+1)) == 1)
sprintf(szValue, "%0.0f", nValue);
else
sprintf(szValue, "%0.2f", nValue);
此代码的含义是什么
答案 0 :(得分:4)
假设代码正在处理存储在浮点数中的金额,如果该值超过某个限制,则第一个IF从nValue减去1美分。如果没有更多的背景,我就不能说出目的。
如果第二个块是直接的“美元”金额,则显示没有小数位的值(笨拙地),以及带有两个小数位的其他值。
答案 1 :(得分:3)
我怀疑第一部分是错误的尝试,以确保nValue不超过nLimit。它应该是
if (nValue + 0.01 > nLimit)
nValue = nLimit - 0.01;
换句话说,如果nValue小于0.01到极限,则使其小于极限值
为了解释第二部分如何工作,它涉及将浮点数除以数字的整数部分。如果数字是整数,那么结果将是1
e.g。
23.00 / 23 = 1 - It's an integer
23.05 / 23 = 1.002 - It's not an integer
每边加1(以ufukgun注意)以防止偏差为零,但是划分是多余的,因为你可以简单地将浮点数与int进行比较
if (nValue == (int)nValue)
答案 2 :(得分:1)
第一部分测试是否nValue< =(nLimit - 0.01)然后将其减少0.01,如果不是这样的话。
第二部分测试浮点值是否对应一个整数,然后将其作为整数打印(如果是42
),否则打印出两位小数(例如42.01
)
答案 3 :(得分:1)
if (nValue + 0.01 > nLimit)
nValue = nValue - 0.01;
如果没有某些上下文,很难理解此代码的用途。似乎是在尝试确保nValue
至少比nLimit
小0.01,但nValue - 0.01
可能仍然大于nLimit
并且代码不会尝试检测这个案例。 nLimit
是该类型的最大值吗?如果没有,那是什么?
if (((nValue+1) / (int)(nValue+1)) == 1)
sprintf(szValue, "%0.0f", nValue);
else
sprintf(szValue, "%0.2f", nValue);
如果nValue
是一个整数,那么这是试图解决的问题。如果是整数,则只将数字的整数部分存储为字符串。否则将值存储为两位小数。
答案 4 :(得分:0)
我认为nValue应该大于0。
nValue + 1用于案例nValue == 0
if (((nValue+1) / (int)(nValue+1)) == 1)
表示nValue是一个整数。 (如45.00)
因此开发人员希望打印不同的整数和浮点数。
答案 5 :(得分:0)
/* min limit of nValue is nLimit */
if (nValue + 0.01 > nLimit) nValue = nValue - 0.01;
/* if nValue is a round number(no floating point value) or zero eg. 4.00 */
if (((nValue+1) / (int)(nValue+1)) == 1)
sprintf(szValue, "%0.0f", nValue);
/* nValue has floating point value eg. 5.002 */
else
sprintf(szValue, "%0.2f", nValue);
希望这可以帮到你