c - 在 c 中对浮点数进行算术运算时创建的随机数
问题描述
我对 c 很陌生,但我必须为学校创建一个程序,为此,我需要知道一个数字中有多少个十进制数,但是当我尝试这个时,一堆随机数来自第四维而我没有不知道如何解决它,有人可以帮助我吗?
这是代码:
int main(void) {
float test = 1.567;
while (test != 0){
test = test * 10;
test = test - (int)test;
printf("%f\n",test);
}
}
编辑:我在 Windows 10 上运行,我正在使用 repl.it 来编程和运行它。这是我得到的输出
0.670000
0.700001
0.000008
0.000076
0.000763
0.007629
0.076294
0.762939
0.629395
0.293945
0.939453
0.394531
0.945312
0.453125
0.531250
0.312500
0.125000
0.250000
0.500000
0.000000
编辑 2:任务是我们必须创建一个程序,您必须在其中输入金额,它会告诉您需要多少 2 欧元硬币、1 欧元硬币等。因为您不能有 4.63454 欧元我想确保您只能输入 2 个十进制数字,否则会引发错误。所以 TLDR:你通过键盘输入数字,但同样的事情发生了。
解决方案
我想确保您只能输入 2 个十进制数字,否则会引发错误。
这确实是一个文本处理问题,因为"%f"
朋友丢失了文本输入的小数位所需的信息。
char buf[100];
if (fgets(buf, sizeof buf, stdin)) {
char *endptr;
double val = strtod(buf, &endptr); // add errno check as desired
unsigned char *dp = strchr(buf, '.');
if (endptr > buf && dp && isdigit(dp[1]) && isdigit(dp[2]) && dp[3] == '\n') {
// success
long long money = llround(val * 100.0); // Scale by 100 and round to an integer
...
} else {
// error
}
}
为了钱,考虑使用long long
。十亿已经不是过去的样子了。
推荐阅读
- istio - Istio 重试不起作用
- python - Tkinter 和 32 位 Unicode 复制——有什么解决办法吗?
- android - 颤振导入'package:flutter_svg/flutter_svg.dart';不适用于 VS 代码和 Android 工作室
- kubernetes - IoT 边缘模块无法在 Kubernetes 上启动
- javascript - Import module from npm to javascript file
- python - Python - 根据索引将元素(行和索引)移动到末尾
- sql-server - 有没有办法编写一个 sql 脚本,将一个表从一个数据库复制到另一个而不丢失 PK 和 FK?
- javascript - 使用 Jwt NodeJs Api 登录 .Net 身份用户
- php - 覆盖持有准备好的语句的变量会关闭该语句吗?
- r - 根据涉及另一列的条件在 r 中创建一列