【发布时间】:2018-01-15 13:46:38
【问题描述】:
这是我想要做的:
- 我需要打印一个浮点数的小数部分,在用户输入过程中该浮点数必须输入为 float。
- 小数部分应该是:如果float是43.3423,输出应该是3423;如果数字为 45.3400,则输出应为 3400。
- 这可以通过字符串输入轻松完成,但我需要一种方法来使用
float进行这项工作,而不会丢失额外的零或不将零附加到用户的原始输入。
这是我已经尝试过的:-
- 将小数部分乘以
frac = num - (int)num,然后乘以frac,直到余数为零。但对于 34.3400 之类的情况,此方法会失败 — 此方法不会包含最后两个零。 -
通过
将浮点数转换为字符串char string[20]; sprintf(string, "%f", float_number);
sprintf 函数将浮点数作为字符串,但在这里它也不会自动检测用户输入的精度,并在末尾用额外的零填充字符串(总共 6 个精度)。所以这里也没有得到用户原始输入精度的信息。
那么,有没有办法做到这一点?该数字必须作为用户的浮点数。有什么方法可以获取有关用户输入精度的信息?如果不可能,解释将非常有帮助。
【问题讨论】:
-
您不能这样做,因为浮点值不会保留有关其创建方式和输入精度的信息。浮点值也存在自然舍入问题,因此用户输入的值可能无法用
float精确表示。简而言之,不使用字符串作为输入是不可能的。 -
牢记@Someprogrammerdude 的提示...您可以将输入作为字符串,计算小数点后的数字,然后将字符串输入转换为浮点数(例如使用
atof()或strtod()),并使用计数的数字进行输出格式化。这听起来需要付出很大的努力(大量的字符摆弄和许多应该进行错误检查的地方)。 我会三思而后行“漂亮的输出”是否值得付出努力... -
你说得对,实际上我只是想找出是否有办法通过将初始输入本身作为浮点数来检测用户输入的精度,但无论如何我都明白了。谢谢。
-
你需要的是保持精度的十进制浮点数; Python 编程语言有这些。使用 C 中经常使用的 IEEE 754 二进制浮点数是不容易实现的。
标签: c string floating-point precision number-formatting