c - Modulo % 仅在 C 中打印一个零位
问题描述
我一直在尝试在我的学校项目的代码中使用模数,但我遇到了一个“问题”:
在我的程序中,我想恢复我的结果并将它们转换为(打印在标准输出上)百分比。
例如:我找到我的数字(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
and1
并且您只想显示0.0833
为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
用于我的临时计算,因为int
不能保证足够宽以存储 32 位值(它很可能在 1990 年之后构建的任何系统上都足够宽,但不能保证)。
如果这仍然不能完全满足您的需求,那么它至少应该给您一些想法。
推荐阅读
- c# - 尝试在 Discord 中使用变量作为超链接降价
- python - PyQt - 轻松将 QWidget 添加到所有视图
- python - python - 按不同类别标记单元测试:单元、集成、“dangerous_integration”
- python - 用复根写了我自己的二次公式,在验证结果时,它不给零。如何解决?
- instagram - 按标签接收所有帖子并实时获取更新喜欢
- java - 是否可以在 java 中自动化 ffmpeg-normalize?
- haskell - 计算小写和大写,然后将其作为元组返回
- java - BorderLayout 为较小的 JLabel 保留空间
- intellij-idea - JetBrains IntelliJ IDEA 删除歧管插件
- go - 将 golang 应用程序部署到 Heroku 时运行迁移