【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片(二)

简介: 【Android 应用开发】Android开发技巧--Application, ListView排列,格式化浮点数,string.xml占位符,动态引用图片(二)

三. 格式化浮点数


如何在程序中保留一个float或者double浮点数的小数位数 , 这里可以使用以下几种方法 :


1.使用DecimalFormat格式化浮点数

首先创建一个DecimalFormat类 ,  这个类可以 按照一定的格式化数字来格式化浮点数. 常见的格式化字符是"#" , "0" .

创建该类的时候 , 将格式化的格式传入 , 例如如果要保存两位小数 , 就传入 "#.00" , 以此类推 .

创建了DecimalFormat对象之后 , 调用该对象的format对象 , 将需要格式化的浮点数传入这个方法 , 返回的结果就是格式化之后的固定位数的浮点数的字符串形式 .

注意 : 这种方法格式化之后的浮点数对象是字符串形式 , 如果之后需要使用这个浮点数进行计算 , 就需要使用BigDecimal进行实现的这种方法 ;

精确度问题 : DecimalFormat使用的是half-even舍入法, 这个不是四舍五入方法, 当出现5的时候,就会向最近的偶数靠近.

例如 : System.out.println(new java.text.DecimalFormat("0.00").format(3.135)); 5最近的偶数是4, 打印的结果就是3.14;


System.out.println(new java.text.DecimalFormat("0.00").format(3.125)); 5最近的偶数是2, 打印的结果就是3.12;


float pi = 3.1415926f;
  DecimalFormat decimalFormat = new DecimalFormat("#.00");
  String formatData = decimalFormat.format(pi);
  System.out.println(formatData);
  System.out.println(new DecimalFormat("#.00").format(pi));


2.利用BigDecimal实现

创建一个BigDecimal对象 , 创建的时候 , 传入需要格式化的浮点数 , new BigDecimal(float) ;

调用这个BigDecimal的setScale方法 , 这个方法传入的参数 : 需要保留的小数位数 , BigDecimal.ROUND_HALF_UP常量 , 之后调用这个常量对应的将BigDecimal转为浮点数的方法 , 得到的结果为转化好的浮点数 .

float pi = 3.1415926f;
  BigDecimal bigDecimal = new BigDecimal(pi);
  float result = bigDecimal.setScale(2, BigDecimal.ROUND_HALF_UP).floatValue();
  System.out.println(result);

与浮点数有关的构造方法 : 可以向构造方法中传入浮点数 或者 字符串 , 这里需要注意的是 , 使用浮点数的构造方法不精确 , 这个值最后会有不该有的数据,尽量使用字符串的构造方法.

例如 :

   

BigDecimal bd1=new BigDecimal(0.05);
        System.out.println(bd1.toString());
        BigDecimal bd2=new BigDecimal("0.05");
        System.out.println(bd2.toString());

结果是 : 

   

0.05000000000000000277555756156289135105907917022705078125
        0.05

因此使用字符串的构造函数,获得的数据更精确.


BigDecimal的基本方法 : 加法 add , 减法 subtract, 乘法 multiply, divide 除法, setScale四舍五入.


加法计算 :

 

BigDecimal bd3=new BigDecimal(String.valueOf(0.05));
        BigDecimal bd4=new BigDecimal(String.valueOf(0.01));
        System.out.println((bd3.add(bd4)).doubleValue());

减法计算 :

   

BigDecimal bd5=new BigDecimal(String.valueOf(0.05));
        BigDecimal bd6=new BigDecimal(String.valueOf(0.01));
        System.out.println((bd5.subtract(bd6)).doubleValue());

乘法计算 :

   

BigDecimal bd7=new BigDecimal(String.valueOf(0.05));
        BigDecimal bd8=new BigDecimal(String.valueOf(0.01));
        System.out.println((bd7.multiply(bd8)).doubleValue());


除法计算 :

       //这里没有考虑数据错误的可能情况

       //定义了精确位数

   

int scale=10; 
        BigDecimal bd9=new BigDecimal(String.valueOf(0.05));
        BigDecimal bd10=new BigDecimal(String.valueOf(0.03));
        System.out.println((bd9.divide(bd10,scale,BigDecimal.ROUND_HALF_EVEN)).doubleValue());

四舍五入:

       //四舍五入

       scale=4;

       BigDecimal bd11=new BigDecimal(String.valueOf(3.1415926));

       System.out.println(bd11.setScale(scale,BigDecimal.ROUND_HALF_UP).toString());

四舍五入的精确模式 :


ROUND_CEILING : 向正无穷方向舍入 .

ROUND_DOWN : 向零方向舍入

ROUND_FLOOR : 向负无穷方向射舍入

ROUND_HALF_DOWN : 向距离近的一方舍入 , 如果两边相等 , 向下舍入 , 例如 2.155 , 保留2位小数的话 是 2.15;

ROUND_HALF_UP  : 向距离近的一方舍入 , 如果两边相等 , 向上舍入 , 例如 2.155,保留两位小数的话 是 2.16;  这个就是四舍五入

ROUND_HALF_EVEN : 向距离近的一方舍入 , 如果两边距离相等 , 如果保留位是奇数位 使用ROUND_HALF_UP , 如果保留位是偶数位,使用ROUND_HALF_DOWN;

  ROUND_UNNECESSARY : 精确的计算 , 不需要舍入 .

ROUND_UP  : 向远离0的方向舍入.

目录
相关文章
|
10月前
|
XML API PHP
Android使用XML-RPC实现blog客户端
Android使用XML-RPC实现blog客户端
83 2
|
7月前
|
存储 Java 数据库
基于全志H713 Android 11:给TvSettings添加default.xml默认值
本文介绍了在全志H713 Android 11平台上为TvSettings应用添加HDMI CEC功能的默认设置值的方法,通过修改SettingsProvider的源码和配置文件来实现默认值的设置,并提供了详细的步骤和测试结果。
198 0
基于全志H713 Android 11:给TvSettings添加default.xml默认值
|
7月前
|
XML Android开发 UED
"掌握安卓开发新境界:深度解析AndroidManifest.xml中的Intent-filter配置,让你的App轻松响应scheme_url,开启无限交互可能!"
【8月更文挑战第2天】在安卓开发中,scheme_url 通过在`AndroidManifest.xml`中配置`Intent-filter`,使应用能响应特定URL启动或执行操作。基本配置下,应用可通过定义特定URL模式的`Intent-filter`响应相应链接。
156 12
|
7月前
|
Shell Android开发
安卓scheme_url调端:在AndroidManifest.xml 中如何配置 Intent-filter?
为了使Android应用响应vivo和oppo浏览器的Deep Link或自定义scheme调用,需在`AndroidManifest.xml`中配置`intent-filter`。定义启动的Activity及其支持的scheme和host,并确保Activity可由外部应用启动。示例展示了如何配置HTTP/HTTPS及自定义scheme,以及如何通过浏览器和adb命令进行测试,确保配置正确无误。
|
9月前
|
Android开发 开发者
Android UI设计中,Theme定义了Activity的视觉风格,包括颜色、字体、窗口样式等,定义在`styles.xml`。
【6月更文挑战第26天】Android UI设计中,Theme定义了Activity的视觉风格,包括颜色、字体、窗口样式等,定义在`styles.xml`。要更改主题,首先在该文件中创建新主题,如`MyAppTheme`,覆盖所需属性。然后,在`AndroidManifest.xml`中应用主题至应用或特定Activity。运行时切换主题可通过重新设置并重启Activity实现,或使用`setTheme`和`recreate()`方法。这允许开发者定制界面并与品牌指南匹配,或提供多主题选项。
133 6
|
9月前
|
Android开发
Android中如何动态的调整Dialog的背景深暗
在Android开发中,Dialog和DialogFragment可通过设置`Window`的`backgroundDimAmount`来控制背景变暗,突出对话框。在DialogFragment的`onCreateDialog`或`onViewCreated`中,获取`Dialog`的`Window`,设置`LayoutParams.dimAmount`(例如0.5f)并添加`FLAG_DIM_BEHIND`标志。要动态调整,可保存`LayoutParams`并在需要时更新。对于Dialog,创建时直接设置同样属性。还可以通过定义主题样式设置背景模糊程度。
195 7
|
9月前
|
XML 存储 JavaScript
50. 【Android教程】xml 数据解析
50. 【Android教程】xml 数据解析
96 1
|
10月前
|
XML 数据格式 Python
python挑出训练集里图片对应的xml文件,方便统计标签框的类别与数目_python 统计voc2007xml中某一类别框个数(1)
python挑出训练集里图片对应的xml文件,方便统计标签框的类别与数目_python 统计voc2007xml中某一类别框个数(1)
|
9月前
|
XML Java Android开发
Android RecyclerView用代码动态设置item的selector
Android RecyclerView用代码动态设置item的selector
70 0
|
10月前
|
XML Java Android开发
Android控件动态使用 (转)
Android控件动态使用 (转)
52 1

热门文章

最新文章