float、double、BigDecimal的一些精度问题
float f = 280.8f;
System.out.println(f*100);
结果是什么?
结果是:28080.0f(我是这么想的)
实际结果是:28079.998
既然float处理有问题换double会不会有问题呢?
double f = 280.8d;
System.out.println(f*100);
结果是:28080.0
结果神奇般的达到了预期!是不是换double就好了呢?
再试一下
double f = 280.71d;
System.out.println(f*100);
结果是:28070.999999999996
是不是很坑呢?
再提供一种处理方式
BigDecimal d = new BigDecimal("280.71");
System.out.println(d.multiply(new BigDecimal("100")).doubleValue());
结果是:28071.0
再试试其他数据貌似也没问题了。
问题原因分析:280.8是十进制数据,计算机使用二进制数据表示。浮点数精度7位,double类型精度15位,BigDecimal API上的解释 Immutable, arbitrary-precision signed decimal numbers.
所以简单来说float存在精度丢失。double也存在,只是存在范围不同。BigDecimal能保存最大精度。涉及到计算非常在意精度请使用BigDecimal
float、double、BigDecimal的一些精度问题的更多相关文章
- java float double bigdecimal
java 有 float,double,BigDecimal 三种,前两者会损失精度,最后一个是专门用于高精度计算的大数类型,但是会损失性能.如果用于金融场合且小数位并不多的时候,可以考虑 BigDe ...
- float/double 浮点数据*100精度丢失问题
工作中微信支付碰到的一个问题,金额是float数字,微信参数需要分且必须是整数,所以*100的时候就有问题了 System.out.println(9.9f*100); //989.99994Syst ...
- Java浮点数float,bigdecimal和double精确计算的精度误差问题总结
(转)Java浮点数float,bigdecimal和double精确计算的精度误差问题总结 1.float整数计算误差 案例:会员积分字段采用float类型,导致计算会员积分时,7位整数的数据计算结 ...
- MySQL中Decimal类型和Float Double的区别 & BigDecimal与Double使用场景
MySQL中存在float,double等非标准数据类型,也有decimal这种标准数据类型. 其区别在于,float,double等非标准类型,在DB中保存的是近似值,而Decimal则以字符串的形 ...
- 解决java float double 浮点型参与计算失精度
本人前段时间做一个社区电商应用,发现了一个 天坑 ...................让我哭会 . 下面听听我的踩坑之路吧 ,电商肯定跟¥打交道了,计算少不了的.由于本人太菜 单纯的以为 fl ...
- java float与double的范围和精度
float与double的范围和精度 1. 范围 float和double的范围是由指数的位数来决定的. float的指数位有8位,而double的指数位有11位,分布如下: float: 1 ...
- double,float,BigDecimal类型数值的操作
float四舍五入保留两位小数 /** * float四舍五入保留两位小数 * */ public static float formatDecimal(float n) { return (Math ...
- c# float类型和double类型相乘出现精度丢失
c# float类型和double类型相乘出现精度丢失 double db = 4.0; double db2 = 1.3; float f = 1.3F; float f2 = 4.0F; Deci ...
- 关于c中 int, float, double转换中存在的精度损失问题
先看一段代码实验: #include<limits> #include<iostream> using namespace std; int main() { unsigned ...
- BigDecimal 小数 浮点数 精度 财务计算
简介 float和double类型的使用局限: 单精度浮点型变量float可以处理6~7位有效数,双精度浮点型变量double可以处理15~16位有效数,在实际应用中,如果需要对更大或者更小的数进行运 ...
随机推荐
- CAS单点登陆/oAuth2授权登陆
单点登陆 CAS是一个单点登录框架,即Central Authentication Service(中心认证服务) ,开始是由耶鲁大学的一个组织开发,后来归到apereo去管,github地址:htt ...
- 自动化测试 | UI Automator 进阶指南
UI Automator 相关介绍: 跨应用的用户界面自动化测试 包含在 AndroidX Test(https://developer.android.com/training/testing) 中 ...
- Docker中运行nginx并挂载本地目录到镜像中
1.1 从hup上pull镜像1.2 创建将要挂载的目录1.3 先要有配置文件才能启动容器1.3.1 vim /data/nginx/conf/nginx.conf1.3.2 vim /data/ng ...
- HttpClientHelper
using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System ...
- WebService SOAP
<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http:// ...
- SharePoint之使用Jquery Mobile定制自己的手机页面
最近一直很忙,既要创业,又要工作,还有弄弄自己的小项目(已暂停,http://www.codelove1314.com/,如果你不愿意浪费你的业余时间,喜欢弄点小东西,请联系我),所以虽然有很多东西分 ...
- 【Javascript系列】变量作用域
问题描述 本篇文章主要讲解javascript变量及其作用域. 1 内容区 在js中,变量大致可分为全局变量(全局作用域)和局部变量(局部作用域): 用关键字var定义变量(全局变量,可以省略va ...
- Dubbo 源码解析四 —— 负载均衡LoadBalance
欢迎来我的 Star Followers 后期后继续更新Dubbo别的文章 Dubbo 源码分析系列之一环境搭建 Dubbo 入门之二 --- 项目结构解析 Dubbo 源码分析系列之三 -- 架构原 ...
- vue_drf之支付宝接口
一.配置 1,生成应用秘钥和公钥 下载对应系统的秘钥生成工具: https://doc.open.alipay.com/docs/doc.htm?treeId=291&articleId=10 ...
- 了解golang的可变参数(... parameters),这一篇就够了
在实际开发中,总有一些函数的参数个数是在编码过程中无法确定的,比如我们最常用的fmt.Printf和fmt.Println: fmt.Printf("一共有%v行%v列\n", r ...