需要一个编程逻辑来打印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时没有考虑。 **请提供以标量条件打印上述结果的逻辑
答案 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