请提供使用PRINTF打印结果的逻辑

时间:2017-07-05 19:50:21

标签: c++ printf

需要一个编程逻辑来打印4个小数点

  EX: scalar should be 0 to -5   
  value = 10006 , scalar = -3 then print result = 10.0060 (4 decimals)  
  value = 123   ,scalar = -5  then print result = 0.0012 (4 decimals)**  
  required value/divisor = 10 , value%divisor = 0060 (required logic after decimals )

我试过这样:

 divisor =  std::pow(10,std::abs(scalar));

 **Result = snprintf(X,Y,"%d.%0*d",value/scalar,4,value%scalar);**

我不允许使用float,setprecision()。

它不一定代表实际值,但我们可以格式化该值以使用原始逻辑打印(通过使用逻辑,添加...减去... pow等)

std :: int32_t divisor = static_cast(std :: pow(10.0F,std :: abs(Scalar)));

但是在上面的结果模数标量值为0时没有考虑。       **请提供以标量条件打印上述结果的逻辑

2 个答案:

答案 0 :(得分:1)

为了打印小数(很容易),你需要浮点数:

printf("%10.6f", static_cast<double>(1) / 3);

如果除法的一个参数是浮点数,编译器会将表达式提升为浮点数。

积分或标量除法将丢失小数。

欢迎您自己编写部门职能。

编辑1:转移
您不需要使用pow函数(特别是因为它的浮点数)。

在循环中使用循环,每次将除数乘以10。

double result = (double) scalar / value;
int divisor = 10;
int i;
for (i = 0; i < NUMBER_OF_DECIMALS; ++)
{
  // Isolate a digit using math.
  // print the digit
  divisor += 10;
}

数学部分留作OP的练习。

答案 1 :(得分:0)

在这个家庭作业练习中,您需要执行自己的数字格式,而不是使用图书馆格式。

例如,要格式化并输出100作为&#34; 100&#34;

int accum = 100;
int position = 0;
while (accum > 0)
{
   printf("%d", accum % 10);
   accum /= 10;
   position += 1;
}

对于您的家庭作业,您需要修改上述循环,以便将printf(".")放在输出编号中的正确位置。您的答案可能涉及在循环之前乘以accum并相对position

测试scalar