C语言输入小数,精确到小数点后10位
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言输入小数,精确到小数点后10位相关的知识,希望对你有一定的参考价值。
我用scanf("%f",&x)接收数据,如x=0.0000002,最后接收到的数据只能精确到小数点后六位,我想接收接进0而又比较小的数,如这数能精确到小数到后10位
直接一点
#include<stdio.h>
void main()
double x;
scanf("%15.10f",&x);
printf("\n%15.10f",x);
当我输入0.0000002的时候,输出的结果就不是我要的结果,我要的就是输出0.0000002;
或者换一个问法,有没有办法,用scanf接收10的负7次方啊,三位大侠都没答到点上啊
把scanf("%15.10f",&x);应该改成scanf("%15lf",&x);这样就好了。
代码中x是double型的,在输入数据的时候是不允许使用%f的,double型的数据输入必须使用%lf
还有,scanf("%15.10f",&x);15.10这个是不允许出现的,在数据输入的时候只能指定输入数据的总长度,不能指定小数点后的长度。
扩展资料:
scanf(函数原型
int scanf(const char * restrict format,...);
函数 scanf() 是从标准输入流stdin(标准输入设备,一般指向键盘)中读内容的通用子程序,可以说明的格式读入多个字符,并保存在对应地址的变量中。
函数的第一个参数是格式字符串,它指定了输入的格式,并按照格式说明符解析输入对应位置的信息并存储于可变参数列表中对应的指针所指位置。每一个指针要求非空,并且与字符串中的格式符一一顺次对应。
参考资料来源:百度百科-scanf (计算机语言函数)
参考技术A 哥们,你这程序有问题x是double型的,在输入数据的时候是不允许使用“%f”的,double型的数据输入必须使用“%lf”
还有,“scanf("%15.10f",&x);”15.10这个是不允许出现的,在数据输入的时候只能指定输入数据的总长度,不能指定小数点后的长度,
你把“scanf("%15.10f",&x);”应该改成“scanf("%15lf",&x);”这样应该就好了本回答被提问者采纳 参考技术B void main()
double x;
scanf("%15lf",&x); //改为15lf其中l是小写的L,表示可以接收总共15位数
printf("\n%.10lf",x); //输出带10位小数,注意10前面有个小数点,l是小写字母L。
system("pause");
输入10位小数0.0000000002
输出0.0000000002 //注意:如果输入的数大于10位小数,则会输出一串0 参考技术C 最简单的方法:把代码改成我这样的:
#include<stdio.h>
int main()
long double x;
scanf("%lf",&x);
printf("\n%.10lf",x);
system("PAUSE");
这样可以达到10的负10次方。 参考技术D double型数据
然后输出格式为
printf("%20.10f",i);
%f是浮点型float的输出方式,在%f之间的“20.10”表示要求输出20位有效数字,其中10位是小数(多了四舍五入,不够的添0)
工具类-java精确到小数点后6位
工具类-java精确到小数点后6位
验证要求,必须精确到小数点后6位,但是后面都是0的话,double会省略0,正则验证不通过,所以有了下面解决方法:
精确到小数点后六位,若最后一位是0则用1代替。
private double getSixScale(String s) {
//先精确到后6位,并转为字符串
String sixScaleString = new BigDecimal(s).setScale(6, BigDecimal.ROUND_HALF_UP).toString();
//若字符串最后一位是0,则用1代替
if ("0".equals(sixScaleString.substring(sixScaleString.length() - 1))) {
sixScaleString = sixScaleString.substring(0, sixScaleString.length() - 1) + "1";
}
//再转为double
return new BigDecimal(sixScaleString).doubleValue();
}
以上是关于C语言输入小数,精确到小数点后10位的主要内容,如果未能解决你的问题,请参考以下文章