问题描述
我一直在尝试在学校项目的代码中使用模数,但是遇到了一个“问题”:
在程序中,我想恢复结果并将其转换为(打印在标准输出上)百分比。
例如:我找到我的数字(4/48),得到“ 0.08333333333”,将其乘以100得到“ 8.333333333”,我将第一个数字打印为int(因此它将基本上输出8) ,然后我要在此之后打印前两位数字,因此我将只使用模10来获得“ 33”。
但是,我的“问题”是当我尝试打印两个零数字时,它将只显示其中一个,因为结果为零,因此不需要多个零。
我想出了如何打印两个零位数字的方法:
if (((int)(freq * 100) % 100) == 0) {
my_put_nbr((int)(freq * 100) % 10);
my_put_nbr((int)(freq * 100) % 10);
} else
my_put_nbr((int)(freq * 100) % 100);
例如,在这种情况下,“ freq”是“ 8.333334”,将打印出8,然后打印33。
但是我想知道是否还有另一种实际的正确方法来做我刚才在那做的事。
我不太擅长解释事情,但我希望这很清楚,否则请告诉我。
解决方法
如果您有一个类似0.08333333
的值,并且想将其显示为8.33
,请这样做
printf( "%.2f\n",freq * 100.0 );
如果不允许您使用printf
,则拍打您的教练以使其变得比所需的更难,这取决于您的my_put_nbr
函数的功能工作,以及如何格式化输出。如果函数打印出整数值,并且您的freq
值始终在0
和1
之间,而您只想将0.0833
显示为{{ 1}},那么您要做的就是
833
它将捕获小数点后的前两位数字,包括零-即my_put_nbr( (int) freq * 10000 );
将转换为0.0100
。
如果您的100
仅应打印单个数字,那么这将需要更多的工作。您可以使用如下循环:
my_put_nbr
我正在使用for ( long mag = 1; mag < 100000; mag *= 10 )
{
if (freq * mag < 1) // prevents leading 0s from
continue; // being displayed
int digit = (long) (freq * mag) % 10;
my_put_nbr( digit );
}
进行临时计算,因为不能保证long
的宽度足以存储32位值(在1990年以后构建的任何系统上,它的宽度都可能足够大,但不能保证)。
如果那仍然不能完全满足您的需求,那么它至少应该给您一些想法。
,当我尝试打印两个零数字时,它只会显示其中一个
您可以尝试以下操作,它应该显示2位数字。
printf("%2.2f",Value);