可以使用库函数2113atof。1 函数名 atof2 声明 double atof(const char *nptr);3 头文5261件#include 4 功能将参数nptr中的字符串转为浮点型数4102据并返回。5 需要注意的是,1653必须是合法的字符串,即以实数形式或者科学计数法形式存储的字符串才可以进行转换,否则转换会出错。 比如"sjdhk"这样的字符串是无法转换为浮点数的。而如果是"1.23sdf"这样的形式,只会处理到最后一个数字,结果为1.23。5 示例代码#includeint main(){char*a="-100.23";//实数形式存储的字符串 char*b="200e-2";//科学计数法形式存储的字符串double c;c=atof(a)+atof(b);//转换后为 -100.23+200e-2=-100.23+2=-98.23printf(“c=%.2lf\n”,c);//输出结果,保留2位小数。期望结果为c=-98.23return 0;}www.mh456.com防采集。
^JAVA输出指2113定位数的科学计5261数方法4102:public static String parseToCientificNotation(double value) { int cont = 0; java.text.DecimalFormat DECIMAL_FORMATER = new java.text.DecimalFormat("0.##"); while (((int) value) != 0) { value /= 10; cont++; } return DECIMAL_FORMATER.format(value).replace(",", ".") + " x10^ -" + cont;}调用方法:parseToCientificNotation(123332.4);输出1653:0.1233324 x10^ 6
浮点数,是指小数点在数据中的位置可以左右移动的数据。它通常被表示成: N = M* RE 这里的M(Mantissa)被称为浮点数的尾数,R(Radix)被称为阶码的基数,E(Exponent)被称为阶的阶码。计算机中一般规定R为2、8或16、是一个确定的常数,不需要在浮
希望可以帮到你:5261@4102Testpublic void test4(){ float exp1 = 1.39e-43f; System.out.println("科学计数法1==" + exp1);// 表示16531.39乘以10的负43次方 double exp2 = 47 * 10000000000000000000000000000000000000d; System.out.println("科学计数法2==" + exp2);// 表示47乘以10的37次方===4.7E38 float exp3 = 1e-43f;// 此时43后面必须加上f,否则会报错.编译器同擦汗那个会将指数最为双精度处理。 System.out.println("科学计数法3==" + exp3);// 表示1乘以10的负43次方 System.out.printf("%9.2f",exp3); System.out.printf("%-9.2f",exp3);// long n = 200;// 此时不需要在200后面加l,因为编译器能识别这个类型,在这里不存在含混不清的地方。 // System.out.println(n); // // double d = 345.678; // String s = "hello!"; // int i = 1234; // //"%"表示进行格式化输出,"%"之后的内容为格式的定义。 // System.out.printf("%f",d);//"f"表示格式化输出浮点数。 // System.out.printf("%9.2f",exp3);//"9.2"中的9表示输出的长度,2表示小数点后的位数。 // System.out.printf("%+9.2f",d);//"+"表示输出的数带正负号。 // System.out.printf("%-9.4f",d);//"-"表示输出的数左对齐(默认为右对齐)。 // System.out.printf("%+-9.3f",d);//"+-"表示输出的数带正负号且左对齐。 // System.out.printf("%d",i);//"d"表示输出十进制整数。 // System.out.printf("%o",i);//"o"表示输出八进制整数。 // System.out.printf("%x",i);//"d"表示输出十六进制整数。 // System.out.printf("%#x",i);//"d"表示输出带有十六进制标志的整数。 // System.out.printf("%s",s);//"d"表示输出字符串。 // System.out.printf("输出一个浮点数:%f,一个整数:%d,一个字符串:%s",d,i,s);//可以输出多个变量,注意顺序。 // System.out.printf("字符串:%2$s,%1$d的十六进制数:%1$#x",i,s);//"X$"表示第几个变量。 }追问为什么System.out.printf("%9.2f",exp3);System.out.printf("%-9.2f",exp3);这两段代码我的输出结果是0.00本回答被提问者和网友采纳
标准c中并未规定浮点型的长度和格式,只说了精度约为7位,所以不一定就是7位。 后面的可以不用写e。float本来就有两种表示方法,一种是通常的带小数点的十进制数形式,另一种为科学计数法,这里为第一种,可以不用。像这种要求精确的数据建议使
使用bigdecimal类型
//你的要求很特别,不管怎么说,这个基本达到你的要求了 #include #include #include #include using namespace std; void myPrint(double d){ std::stringstream ss1,ss2; std::string text = ""; ss1> text; if(text.find('e')!=string::npos){
5261int CountNeg(float a) 4102{ 1653int n = 0; while((a = a * 10) < 10) ++n; return n; } void EOut(float a, float b) { if (a < b) return; int na = CountNeg(a); int nb = CountNeg(b); for(int i = 0; i < na; i++) a *= 10; for(int i = 0; i < nb - na; i++) b *= 10; printf("%f±%fE%d", a, b, na * -1); } int main() { float a = 9.168e-3, b = 2.214e-5; EOut(a, b); return 0; } ,考虑格式化的输出就可以拉内容来自www.mh456.com请勿采集。