float、double计算中精度丢失的处理

C#的String转换成float防止精度丢失问题 1、精度问题: float x = float.Parse(s); 在提交小数的时候会出现精度丢失问题, 如果是0.5则没有问题 数据库中也是0.5,但是提交其他小数像 0.2 0.6 就会出现问题,数据库中是0.20000000298023224 0.60000002384185791 之类的数据,后来在网上查了一些资料 f loat:浮点型,含字节数为4,32bit,数值范围为-3.4E38~3.4E38(7个有效位) double:双精度实型,含字节数为8,64bit数值范围- 阅读详情

参考http://blog.youkuaiyun.com/luweicheng24/article/details/77800688

import java.math.BigDecimal;


public class T {
public static void main(String[] args) {
    String aaString="37.10";
    System.err.println(Double.valueOf(aaString));
    System.err.println(Float.valueOf(aaString));

    float amount =37.10f;
    float amount2 =amount*100;
    float amount4 =amount*100f;
    long amount3 =(long)amount2;

    System.err.println(amount);
    System.err.println(amount2);
    System.err.println(amount3);
    System.err.println(amount4);



//  
    BigDecimal bigDecimal1 = new BigDecimal(Float.toString(amount));
    System.err.println(bigDecimal1);
    BigDecimal bigDecimal2 = new BigDecimal(Float.toString(100));
    System.err.println(bigDecimal2);

    BigDecimal result = bigDecimal1.multiply(bigDecimal2);
    System.err.println(result);

    long longValue =result.longValue();

    System.err.println(longValue);


}
}

37.1
37.1
37.1
3709.9998
3709
3709.9998
37.1
100.0
3710.00
3710

1、String 转 float不会丢失精度;
2、float乘法计算会丢失精度、
乘积总是在一个正确的结果左右偏0.0000**1,这是因为当两个float数值相乘时,底层采用转换成二进制来进行乘法的运算
3、采用BigDecimal 可以实现高精度运算
Java数据类型—BigDecimal 1. 当我们在进行有着高精度的计算要求的时候不要使用double和float 因为它们有着精度丢失的问题 2. 如果使用BigDecimal的时候,不要选择double值作为初始化的值,因为它同样会引入精度的问题 3. 如果你使用BigDecimal时候设置了精度,那就同时提供舍入模式,告诉BigDecimal如何舍入从而提供你想要的精度 4. BigDecimal继承了Number类和实现了Comparable接口 5. BigDecimal 针对加减乘除提供可特定的方法,因为BigDecimal不支持 阅读详情

相关推荐

unity打包流程整理-Windows/Mac/Linux平台

1.Platform(平台)功能: 选择目标构建的目标平台选项PC, Mac & Linux Standalone: 适用于 Windows、Mac 和 Linux 平台2.Target Platform(目标平台)功能: 选择具体的操作系统版本选项Windows: 针对 Windows 操作系统Mac: 针对 macOS 操作系统Linux: 针对 Linux 操作系统3.Architecture(架构)功能: 选择应用程序的目标处理器架构选项x86: 针对 32 位系统。

weixin_42333247的博客 5135

Java Double类精度丢失问题

一、精度丢失原理 例1:15.75 -> 1111.11 step1:拆分 将整数和小数部分拆分得:15 和 0.75 step2:计算整数部分 整数部分是 15,计算得 1111,见下图: step3:计算小数部分 小数部分是 0.75,计算得 0.11,见下图: step4:合并 将整数部分和小数部分拼接得到最终的结果:1111.11 复原:1111.11 -> 15.75 step1:拆分 将整数和小数部分拆分得:1111 和 0.11 s..

incredibleww的博客 3513

告别Root!用Termux+ADB在Android上玩转自动化(保姆级教程)

本文详细介绍了如何在非Root环境下使用Termux和ADB实现Android自动化操作,无需Root权限即可运行自动化脚本。通过Termux搭建Linux终端环境,结合ADB无线调试和Python脚本,实现点击、滑动、截图等自动化功能,适用于定时任务、自动签到等场景。

weixin_42548888的博客 536

string转float显示位数有误;cout 的 precision 成员函数

string转float显示位数有误;cout 的 precision 成员函数

IT探险者-returningprodigal 764

【maxENT】从数据到地图:R语言实现最大熵物种分布建模全流程解析

本文详细解析了如何使用R语言实现最大熵模型(MaxEnt)进行物种分布建模的全流程。从数据准备、环境变量处理到模型训练与参数调优,再到模型评估与结果可视化,提供了实用的代码示例和避坑指南。特别适合生态学研究者利用最大熵模型处理物种分布数据,提升研究效率。

weixin_27244795的博客 216

Cloudflare SaaS 优选IP实战:提升大陆访问速度的配置指南

本文详细介绍了如何通过Cloudflare SaaS优选IP提升中国大陆用户访问速度的配置指南。从基础环境准备到IP筛选方法,再到完整配置流程和效果验证,帮助用户突破免费套餐限制,精准优化网络线路,特别适合跨境电商和面向中国大陆用户的网站优化。

weixin_29231027的博客 683

java大数据计算遇到的科学计数显示问题及运算时精度丢失问题分析解决

大数据计算遇到的科学计数问题及运算精度丢失问题 在《Effective Java》这本书中就给出了一个解决方法。该书中也指出,float和double只能用来做科学计算或者是工程计算,在商业计算等精确计算中,我们要用java.math.BigDecimal 对于数据的计算可以用java.math.BigDecimal类的原生方法加减乘除都包括了 我这里有个工具类可以借鉴参考一下: package com.dm.springboot.utils; import java.math.BigDecim

dmlcq的博客 1835

国科大学习资料--人工智能原理与算法-2021年期末考试题解析(学长整理)

国科大学习资料–人工智能原理与算法-2021年期末考试题解析(学长整理) 国科大学习资料–人工智能原理与算法-2021年期末考试题解析(学长整理) 国科大学习资料–人工智能原理与算法-2021年期末考试题解析(学长整理) 根据学弟的反馈,该年的期末题只有5道,且均是作业题(所以大家一定要积极完成作业,考前多做几遍!!!!) 下面解析: 3.25 由于该题,我没有做过,所以只能给你英文版的答案。答案如下,其他的题目答案都是中文版。 5.9 8.10 12.20 15.13 ...

无名何许人的博客 3978

java float和double的精度_JAVA中控制double和float的精度

http://stephen830.javaeye.com/blog/260776本篇介绍了在JAVA中如何对double或者float的浮点数进行精度计算,在JAVA中提供了多种参数来实现精度的不同控制方式。具体例子如下:Java代码/**Createdon2005-6-5*Authorstephen*EmailzhoujianqiangATgmailDOTcom*Cop...

weixin_31036469的博客 187

YOLOv8 智能交通违章检测 - 压线/越线行驶检测详解

本文提出了一种基于YOLOv8的智能交通违章检测方案,重点解决车辆压线/越线行驶的识别问题。系统采用多技术融合方案:YOLOv8检测车辆、ByteTrack跟踪轨迹、传统或深度学习方法识别车道线,并通过几何计算判断车辆是否违规跨越实线。文章详细介绍了技术难点(如车道线分类、透视变形处理)、判定流程、系统架构和核心代码实现,包括车道线检测、违章逻辑判断和可视化模块。同时指出了现有方案的局限性,建议通过引入逆透视变换和专用车道线分割模型来提升准确率。该纯视觉方案具有低成本、易部署的特点,适用于智能交通监控场景。

u010117029的博客 173

133.在 Vue3 中使用 OpenLayers 实现画多边形、任意编辑、遮罩与剪切处理功能

《Vue3+OpenLayers实现多边形绘制与区域处理》摘要:本文介绍如何基于Vue3+OpenLayers+ol-ext实现地图多边形交互功能。核心功能包括:鼠标绘制任意多边形、拖动顶点编辑边界、遮罩显示(非选区变红)、选区剪切显示及功能重置。技术方案采用OpenLayers处理地图渲染,ol-ext实现高级遮罩/剪切效果,ElementPlus提供UI控件。该方案适用于城市规划、园区展示等需要区域标记的场景,完整代码展示了从初始化、绘制、编辑到特效处理的全流程实现。

小彭的博客 959

Float精度丢失处理方法

项目开发过程中,有很多涉及到金额、款项类的输入框,前端输入后传递到后端接收,很多时候直接用Float,Double类型接收,数值不是很大时候没问题,精度不会出错,但是一般数值过大就会出现小数点精度丢失,原理应该是跟Float,double类型的底层存储位数有关系,本文介绍java中如何处理此类问题! 处理方法是 后台用 java.math.BigDecimal类型的参数接收,不要使用Float,Double类型,BigDecimal会将前端传递的参数精准的接收,在直接入库就可以啦! 还有就是在后端项目涉及数

wujian_csdn_csdn的博客 2085

[内网基础] 内网基础知识 —— Windows 工作组

在一个大型单位里,可能有成百上千台计算机互相连接组成局域网,如果不对这些计算机进行分组,网络的混乱程度是可想而知的。Windows 为了解决这一问题,就产生了工作组(Work Group)这个概念。Windows 工作组尝试将不通的计算机按功能(或部门)分别列入不同的工作组,例如技术部的计算机都列入 “技术部” 工作组、行政部的计算机都列入 “行政部” 工作组。要想访问某个部门的资源,只要在 “网络” 里双击该部门的工作组名,就可以看到该部门里的所有计算机了。

Blue17 の 小窝 1602

BigDecimal操作double、float精度丢失问题

一、问题 最近使用BigDecimal进行数值加减运算的时候踩了一个小坑:BigDecimal操作double、float数值时精度丢失。 举个例子: public static void main(String[] args) { float d1 = 1.2f; float d2 = 2.1f; BigDecimal b1 = new B...

noaman_wgs的博客 6331

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java 浮点型(Double,Float)精度丢失解决方案

前言 最近公司某小伙子做了一个商城的微信支付相关的接口,其中包含退款,在测试过程中发现部分单据没有退款,微信支付提示退款金额跟支付金额不匹配(大于支付金额),检查数据库和调试过程中,发现商品的单价和手工计算出来的总价是跟订单金额匹配的,实在无法确认问题原因最终bug转向我来排查,于是有了此文 排查 由于手工计算出来的金额跟实际支付的金额是能匹配上的,所以一开始我以为是订单已经进行了部分退款,再次全部退款的话肯定会被微信阻止,因为这样的话就会出现超退。 第一步:是否已经部分退款 去微信支付平台排查是否有退款,

wantnrun的专栏 605

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

[数字类型]java中涉及数字的计算

在java中,如果涉及到浮点类型的数字类型的计算,加减乘除,不能使用float或者double类型直接计算,会造成精度丢失,计算的结果跟正常情况下的结果显示有很大区别.需要使用一种数字处理类BigDecimal. 1.springmvc中前端传递浮点型(float/double)问题 @RequestMapping(value = "/getCommissionRat/{ve...

PerryHsu的博客 1081

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

关于double的精度丢失(不是超于最大,最小值)

问题: System.out.println(50000 - 49880.7799999999988);/ /119.22000000000116,发现得到的结果不对         System.out.println(Double.parseDouble(50000+"")-Double.parseDouble("49880.78")); //同样得到119.2200000000011

dac55300424的专栏 6205

java中double、float类型计算精度丢失问题

java中计算double、float类型数值,往往会出现计算精度丢失,也就是想下面这种情况: 这时,我我们使用BigDecimal类进行计算即可 这里注意一下,如果实例化a和b时,后面的参数单纯写一个double类型的数值还是不够的,减法计算还可能失去精度,最好的办法就是想图中一样转化成string的,这样就算就不会又问题了。如果还想保留两位小数,可使用如下方式格式化一下 先定义一个

FFA(Frighting for Ambition!) 3247

float和double精度误差的问题总结(精确计算)

在这里为什么要写出这个,那是因为解释为什么用到高精度问题的原因。如落谷的P1009这道题目,是求阶乘之和,之前我就有疑问,double的范围不是3.4*10的308次方么,没有益处啊。随后我做了大量的资料收集和理解.首先,float最多能有7位有效数字,而double则有16位,这句话我想很多像我一样大一的同学们都会看到,但是没能去理解,我们来看下代码#include<stdio.h>......

qq_30315977的博客 5409

double类型转为BigDecimal的小技巧

​ 我最近在公司遇到了一个bug,因为项目中涉及到了和金额相关的业务,所以就接触到了 BigDecimal 高精度类型,在处理BUG中遇到了丢失精度的问题,又因为这涉及到钱的问题,不能忽视; 如果提交表单是 提交1000000.10,最大还是会存1000000.09​ 打断点后,可发现double类型数据转Decimal时精度丢失,因此不能使用此构造方法进行转换。 解决Double类型在BigDecimal中精度丢失问题,使用string类型的构造...

m0_56054225的博客 3150

Java中float类型精度问题

  今天发现了一个小的问题,在网上找了说的不多,在这记录下来方便自己和比人解决自己的问题吧。 代码片段 1float unit = Double.valueOf(ActionUtils.getBillingTransformUnit(request));//取出换算单位1000.02                float   svt = ((curveSegment.getEndVal(...

weixin_34162695的博客 298

java中float double利用BigDecimal运算

java中float double利用BigDecimal运算

hdsghtj的博客 666

Java处理小数点精度

Java处理小数点精度简介         java中提供了浮点数float和double类型表示小数计算,但是设计这2类型主要是为了科学计算和工程设计而设计的。因此,并没有提供完全精确的结果,所以不应该被用于需要精确结果的场合。特别是货币计算。问题出现         假设你现在有¥1.03元,花掉了¥0.42之后剩下多少钱呢?使用计算器是非常简单的计算,但是如果交给Java程序那结果如何呢?S...

一叶知春秋 6515

float 与 double 类型区别

🌸 float 与 double 类型区别 🌸 float 单精度浮点数 在机内占 4 个字节,用 32 位二进制描述。 double 双精度浮点数 在机内占 8 个字节,用 64 位二进制描述。 浮点数在机内用指数型式表示,分解为: 数符,尾数,指数符,指数 四部分。 数符占 1 位二进制,表示数的正负。 指数符占 1 位二进制,表示指数的正负。 尾数表示浮点数有效数字,0.xxxxxxx, 但不存开头的 0 和点。 指数存指数的有效数字。指数占多少位,尾数占多少位,由计算机系统决定 保留小数(

Chen_chenjiasheng的博客 379

java小数计算精度

说到Java浮点数新手第一想到的就是使用double。Java中double类型与float类型的精度不同,计算时精度会发生丢失甚至错误,在数值过大的情况下会变成科学计数法表示。....

以前是为了好玩,现在是为了提升自己 3935
上一篇: Fragment销毁自己
下一篇: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK fla
SeekSage
SeekSage 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄13年 364粉丝 286原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值