今天又踩了一个坑,使用DecimalFormat来完毕四舍五入。可是传入的是float类型,几轮測试才发现一个问题,传入的float会被转为double类型。大家都知道float是4位,double是8位,强转肯定会造成进度丢失。

使用以下的方法

  public static String formatMoney(float value) {
DecimalFormat format = new DecimalFormat("####.#");
format.setRoundingMode(RoundingMode.HALF_UP);
return "¥" + format.format(value);
}
  1. 传入1.15 返回的是1.1
  2. 传入1.25 返回的是1.3

    好奇怪哦。format.format(value)默认是接收double类型,我如今传入了float类型,也没有报错,可是它已经强转为了double类型,1.15已经转为1.149999999….精度已经丢失。

解决方式使用BigDecimal 来不丢进度的将float转换位double

改动方法

  public static float formatFloat(float value) {
BigDecimal decimal = new BigDecimal(String.valueOf(value));
DecimalFormat format = new DecimalFormat("####.#");
format.setRoundingMode(RoundingMode.HALF_UP);
return Float.parseFloat(format.format(decimal.doubleValue()));
}

使用format.setRoundingMode(RoundingMode.HALF_UP);能够控制转换的方式。详细文档能够參考java doc

DecimalFormat 四舍五入Float类型的坑的更多相关文章

  1. 正确生成浮点型的方法,解决sqlachemy Float浮点型的坑,生成float类型时,长度和精度均为0,导致查询不到结果!

    问题描述 在使用flask_sqlachemy时,给price字段选择了Float类型,数据库用的mysql,生成数据库表后,发现 from sqlalchemy import Float,Colum ...

  2. pandas神坑:如果列有NAN,则默认给数据转换为float类型!给pandas列指定不同的数据类型。

    今天碰到一个错误,一个字典取值报keyError, 一查看key, 字符串类型的数字后面多了小数点0, 变成了float的样子了. 发现了pandas一个坑:如果列有NAN,则默认给数据转换为floa ...

  3. 格式化 float 类型,保留小数点后1位

    """  练习 :   小明的成绩从去年的72分提升到了今年的85分,请计算小明成绩提升的百分点,   并用字符串格式化显示出'xx.x%',只保留小数点后1位: &qu ...

  4. OpenMesh 将默认的 float 类型改为 double 类型

    OpenMesh 中默认的数据类型都是 float 类型的,如果要将其默认的 float 类型改为 double 类型,可以这么做: #include <OpenMesh/Core/Mesh/P ...

  5. 在C#项目中需要用double类型操作MSSQL float类型数据(附C#数据类型和SQL数据类型对照)

    C#操作SQL Float类型,数据会多很多小数,原来是C#的float和sql的float类型不一致.以下是数据库中与C#中的数据类型对照. /// <summary> /// 数据库中 ...

  6. float类型转对象 对象转float类型(一)

    //float类型转化为对象CGFloat fValue = 1.f;NSNumber *objNo = [NSNumber numberWithFloat:fValue];数值.BOOL型都可以转成 ...

  7. float类型进行计算精度丢失的问题

    今天一个案子,用户反映数量差异明明是 2.0-1.8,显示的结果却为0.20000005,就自己写了段方法测试了一下:package test1;public class Test2 {/*** @p ...

  8. C#和C++中的float类型

    博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:C#和C++中的float类型.

  9. java中如果需要精确的计算答案,请避免使用double类型与float类型

    double类型与float类型主要用于科学计算与工程计算而设计的,用于二进制浮点计算.对于普通计算通常是结果不准确的,所以对于普通的浮点数的加减法等,解决的方法需要用int,long,BigDeci ...

随机推荐

  1. Cordova 快速入门记录

    本篇文章由:http://xinpure.com/cordova-quick-start-recording/ 记一笔 Cordova 官网入门文档 Get Started Fast,言简意该.通俗易 ...

  2. Ubuntu快捷键截图

    gnome-screenshot #全屏截图 gnome-screenshot -a #区域截图 在设置-键盘-快捷键-自定义快捷键中添加这个指令,创建快捷键. 注:我本人是在VBox里装的Ubunt ...

  3. 自己的一个验证电话和ecshop验证电话

    //验证电话 function checkPhone($phone) { $preg_mobile = preg_match("/^1\d{10}$/", $phone ); $p ...

  4. Spring加载xml配置文件的方式(BeanFactory和ApplicationContext区别)

    描述 大家都知道Java读普通文件是通过Basic I/O 中的InputStream.OutStream.Reader.Writer 等实现的.在spring 框架中,它是怎样识别xml这个配置文件 ...

  5. cadence orcad查找技巧

    本文讲述了如何在OrCAD原理图中根据元件位号或者元件值快速查找元件的两种方法. 方法一:在.obj页面的“File”标签下查找元件. 方法二:在.obj页面的“Hierarchy”标签下查找元件. ...

  6. 用JIRA管理你的项目

    https://blog.csdn.net/gaowenhui2008/article/details/70241657   (一) JIRA环境搭建

  7. 从调试角度理解ActionContext、OgnlContext、OgnlValueStack的关系

    被调试代码:    package web; import java.util.Map; import javax.servlet.http.HttpServletRequest; import or ...

  8. jvm垃圾收集器之Throughput GC

    呃.HotSpot VM的GC组老人之一Jon Masamitsu很久之前就写过blog讲解这个:https://blogs.oracle.com/jonthecollector/entry/our_ ...

  9. pycharm编写spark程序,导入pyspark包

    一种方法: File --> Default Setting --> 选中Project Interpreter中的一个python版本-->点击右边锯齿形图标(设置)-->选 ...

  10. Scanner.findInLine()与while的使用莫名其妙的导致NoSuchElementException: No line found

    public static boolean parseHTML(Scanner sc, List<String> errorInfo) { String[] tags = new Stri ...