double精确到几位小数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 循环内作为计数器变量使用时,整数类型尤为有用。
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精确到几位小数的主要内容,如果未能解决你的问题,请参考以下文章