将科学计数法中的数字转换为十进制[关闭]
Posted
技术标签:
【中文标题】将科学计数法中的数字转换为十进制[关闭]【英文标题】:convert numbers in scientific notation to decimal [closed] 【发布时间】:2020-11-26 13:43:00 【问题描述】:编写一个 C 程序,将科学记数法中的数字转换为等效的十进制形式: 给定 8.3e+2 输出 = 830 2.E-1 输出 = 0.2 4.3E2 输出 = 430 C/C++ 中是否有任何内置库或函数可以做到这一点? 或者必须编写自己的代码,在这种情况下,有什么简单的方法可以实现这一点?
【问题讨论】:
首先决定您是否需要 C 或 C++ 的解决方案,它们是两种截然不同的语言。其次,你自己试过什么?请花一些时间阅读How to Ask,以及this question checklist。最后,请了解如何edit 您的问题,例如包含您尝试的minimal reproducible example。 您可能想探索scanf()
formatting specs 和printf()
formatting specs。
问题是可以依赖哪些先决条件。例如。是否可以将 1.23e-100 转换为十进制形式?需要处理的值的范围是多少?
@EricPostpischil 现在您已经删除了 C++ 标签,问题是发布的已接受答案似乎无效。也许撤消或更改您的编辑?
@pensee:原始海报。您应该说明您需要 C 还是 C++ 解决方案。如果你想要 C,你应该取消对当前答案的接受,因为它是 C++,因为它是不正确的。如果你想要 C++,你应该添加 C++ 标签,删除 C 标签,并编辑问题以仅引用 C++,而不是 C。它们是不同的语言,有不同的规则,并且不应将它们混合在问题中,除非问题涉及两者之间的相互作用或两者之间的差异。
【参考方案1】:
试试这个
#include <iostream>
#include <string>
int32_t main(int32_t argc, char *argv[])
std::string str = "8.3e+2";
std::cout << std::stod(str) << std::endl;
return EXIT_SUCCESS;
【讨论】:
这适用于我的编译器,但我有一个问题:你为什么写这个int32_t main, char *argv[]
而不仅仅是int main()
。好像是Java
C 从命令行获取参数,这就是你捕获它们的方式,argc 是参数的数量,argv 是带有它们的字符串数组。
@ACoelho 没有对任何命令行参数做任何事情。在这个 mcve 中。顺便提一句。 int32_t main
而不是 int main
在我看来也有点奇怪。 (我觉得没有错……)
谢谢 这似乎工作。我是 *** 的初学者,想知道几件事 - 1) 对于新行,我们是否总是需要输入 ?这很奇怪,我不输入这个标签就无法换行。同样,多个空格直接不起作用。不知道那个标签是什么。使用这个问题作为学习 *** 语法的机会。
int32_t main
是错误的。 C++ 2017 (draft n4659) 6.6.1 说main
应该有一个声明的返回类型int
。可能int32_t
是int
的别名(如果包含<cstdint>
),但这不是可移植的。此外,尽管 OP 标记了 C 和 C++,并在一个地方编写了 C/C++,但他们要求提供 C 程序,因此平衡在于 C,而不是 C++。以上是关于将科学计数法中的数字转换为十进制[关闭]的主要内容,如果未能解决你的问题,请参考以下文章
将数据帧转换为 numpy 数组会导致所有数字以科学计数法打印 [关闭]