这段代码的含义是什么?

时间:2010-07-15 08:03:41

标签: c++ c

我在我们正在使用的一个框架中找到了以下代码,

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);

此代码的含义是什么

6 个答案:

答案 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);

希望这可以帮到你