如何在 C 中组合变量来表示科学计数法?
Posted
技术标签:
【中文标题】如何在 C 中组合变量来表示科学计数法?【英文标题】:How to combine variables to represent scientific notation in C? 【发布时间】:2014-02-01 03:39:34 【问题描述】:如果我有
a = 3;
b = 5;
我怎样才能做到这一点
double result = 3e5,但只使用变量?
我知道 aeb 显然不起作用。
【问题讨论】:
你的问题毫无意义。请澄清。 喜欢double result = a * exp10((double)b);
?
@OldProgrammer 这对我来说很有意义
你可以编写一个函数来根据 a/b 参数追加 0
我的意思是不是普通的 3e5,而是数字 3 和 5 存储在变量中。
【参考方案1】:
试试:
double result = a * pow(10.0,(double)b);
或者,使用 GNU 扩展:
double result = a * exp10((double)b);
在任何一种情况下,#include math.h 并链接到数学库(例如-lm
)。这可能比拼凑一个字符串并转换为 double 更有效。
【讨论】:
这更有效,但在良好的 C 实现中不太准确。pow
的结果可能有一些错误,乘法可能有一些错误。在一个好的 C 实现中,atof
会产生尽可能准确的结果。但是,C 标准并不要求这样做。【参考方案2】:
使用stdlib.h
和sprintf
中定义的函数atof
:
float a = 3;
int b = 5;
char tmp[10];
sprintf(tmp, "%fe%d", a, b);
double x = atof(tmp);
printf("x = %fe%d = %f\n", a, b, x);
输出:http://ideone.com/NdDcNB
x = 3.000000e5 = 300000.000000
【讨论】:
您可能需要使用snprintf
和更大的缓冲区大小以防a
和b
变得非常大。以上是关于如何在 C 中组合变量来表示科学计数法?的主要内容,如果未能解决你的问题,请参考以下文章
C语言里要对输出的结果用科学计数法表示保留三位有效数字应该怎么写啊?