C语言里,double类型的数据可以精确到小数点后几位?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言里,double类型的数据可以精确到小数点后几位?相关的知识,希望对你有一定的参考价值。
Linux32位环境下,C语言,gcc编译的,不是说double是精确到16位的吗,但我这里只显示了6位,double a=1.0000019;printf(“%lf”,a),输出1.000001;再多一位就直接自动四舍五入了,初学者求助。
问1:为什么只显示了6位,而不是书上说的16位?
问2:为什么会自动四舍五入,如何不让他四舍五入?
C语言里面,默认%f是小数点后6位,如果想小数点后面16位,写成%.16lf,不会自动四舍五入的,double是一个近似值,通常没有办法做的很精确。通常能精确到小数点后面5,6位,也就是说超过5,6位了可能就不准了。
1、double f = 111231.5585; BigDecimal b = new BigDecimal(f); double f1 = b.setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue(); 。
2、new java.text.DecimalFormat("#.00").format(3.1415926)
3、C风格,最方便,double d = 3.1415926;String result = String .format("%.2f", d); String .format("%-10.2f", d);
4、NumberFormat ddf1=NumberFormat.getNumberInstance() ; void setMaximumFractionDigits(int digits)。
参考技术A C语言里面,默认%f是小数点后6位,如果想小数点后面16位,写成%.16lf不会自动四舍五入的,double是一个近似值,通常没有办法做的很精确.
通常能精确到小数点后面5,6位,也就是说超过5,6位了可能就不准了。本回答被提问者采纳 参考技术B "%lf"默认只显示6位小数,如果想显示更多请指定:例如"%0.16lf"
精度位不够自动四舍五入,没办法去掉。只有增加精度显示 参考技术C 十进制的15或16位有效数字,因此精确到小数点后最多有15或16位。 参考技术D 这个我记得跟系统的位数有关吧,还有你是以lf 的格式打印出来的,这2个一样吗?
double精确到几位小数
参考技术A15位。
double型小数点后15位。double类型是双精度浮点数,占用8字)即64位,其精度是由32个bit的二进制尾数来确定的,因此准确精度是二进制精度而不是十进制精度,通常可以保证十进制小数点后15位有效精度。
双精度浮点数(double)是计算机使用的一种数据类型,使用64位(8字节)来存储一个浮点数。它可以表示十进制的15或16位有效数字,其可以表示的数字的绝对值范围大约是:-1.79E+308~+1.79E+308。
如果需要四舍五入,在C/C++中没有专门的函数,你可以这样实现:aStr.Format("%.2f",a+0.005);再舍去位加上5,再截断的时候就等于是四舍五入了。
Visual Basic 支持几种 Numeric 数据类型— Integer(整型)、Long(长整型)、Single(单精度浮点型)、Double(双精度浮点型)和 Currency(货币型)。与 Variant 类型相比,Numeric 类型占用的存储空间通常要少。
如果知道变量总是存放整数(如 12 )而不是带小数点的数字(如 3.57),就应当将它声明为 Integer 类型或 Long 类型。整数的运算速度较快,而且比其它数据类型占据的内存要少。在 For...Next 循环内作为计数器变量使用时,整数类型尤为有用。
以上是关于C语言里,double类型的数据可以精确到小数点后几位?的主要内容,如果未能解决你的问题,请参考以下文章