double精确到几位小数

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了double精确到几位小数相关的知识,希望对你有一定的参考价值。

参考技术A

15位。

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 循环内作为计数器变量使用时,整数类型尤为有用。



double计算结果不精确

参考技术A 问题场景:
使用double进行计算时,偶尔会出现计算不准确的现象,比如:398649.9+0.2 = 398650.10000000003

问题原因:
计算机计算的时候数字是用二进制保存的,计算后再转换成十进制,如果精度不够就会出现误差。

解决办法:
decimal是128位高精度浮点数,常用于金融运算,不会出现浮点数计算的误差。
如果项目对执行效率要求高就使用double,如果项目对数字精确度要求高就使用decimal类型(java语言使用BigDecimal)。
BigDecimal的构造函数入参为String类型,分别使用add、subtract、multiply、divide直接进行加减乘除运算,也可以指定运算结果精确到小数点后几位。
1)直接进行加法
public static String add(String v1,String v2)
        BigDecimal b1 = new BigDecimal(v1);
        BigDecimal b2 = new BigDecimal(v2);
        return b1.add(b2).toString();

2)指定精确位数的除法
public static String div(String v1,String v2,int scale) 
        BigDecimal b1 = new BigDecimal(v1);
        BigDecimal b2 = new BigDecimal(v2);
        return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).toString();


备注:
js中可以将浮点数转为整数,再对结果做运算。比如0.1 + 0.2,可以转化为(1*2)/3
js四舍五入使用toFixed()方法
js判断两位小数输入的正则表达式为RegExp("^([0-9]1,6)(\\.[0-9]0,2)?$");

以上是关于double精确到几位小数的主要内容,如果未能解决你的问题,请参考以下文章

C语言编程序时怎么控制浮点型输出的小数点精确到几位

C语言里,double类型的数据可以精确到小数点后几位?

double计算结果不精确

Java中double数据计算,小数点后出现异常

C++中,如何保留指定的小数位,不是COUT输出~

Java中的float精确多少位?