【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的方向舍入.

目录
相关文章
|
3月前
|
存储 缓存 编解码
Android经典面试题之图片Bitmap怎么做优化
本文介绍了图片相关的内存优化方法,包括分辨率适配、图片压缩与缓存。文中详细讲解了如何根据不同分辨率放置图片资源,避免图片拉伸变形;并通过示例代码展示了使用`BitmapFactory.Options`进行图片压缩的具体步骤。此外,还介绍了Glide等第三方库如何利用LRU算法实现高效图片缓存。
68 20
Android经典面试题之图片Bitmap怎么做优化
|
7月前
|
Android开发
Android通过手势(多点)缩放和拖拽图片
Android通过手势(多点)缩放和拖拽图片
55 4
|
7月前
|
Java Android开发
android 下载图片的问题
android 下载图片的问题
47 3
|
2月前
|
XML Java 数据格式
手动开发-简单的Spring基于XML配置的程序--源码解析
手动开发-简单的Spring基于XML配置的程序--源码解析
82 0
|
4月前
|
数据处理 开发工具 数据安全/隐私保护
Android平台RTMP推送|轻量级RTSP服务|GB28181接入之文字、png图片水印的精进之路
本文探讨了Android平台上推流模块中添加文字与PNG水印的技术演进。自2015年起,为了满足应急指挥及安防领域的需求,逐步发展出三代水印技术:第一代为静态文字与图像水印;第二代实现了动态更新水印内容的能力,例如实时位置与时间信息;至第三代,则优化了数据传输效率,直接使用Bitmap对象传递水印数据至JNI层,减少了内存拷贝次数。这些迭代不仅提升了用户体验和技术效率,也体现了开发者追求极致与不断创新的精神。
|
4月前
|
XML Android开发 UED
"掌握安卓开发新境界:深度解析AndroidManifest.xml中的Intent-filter配置,让你的App轻松响应scheme_url,开启无限交互可能!"
【8月更文挑战第2天】在安卓开发中,scheme_url 通过在`AndroidManifest.xml`中配置`Intent-filter`,使应用能响应特定URL启动或执行操作。基本配置下,应用可通过定义特定URL模式的`Intent-filter`响应相应链接。
116 12
|
4月前
|
自然语言处理 定位技术 API
Android经典实战之如何获取图片的经纬度以及如何根据经纬度获取对应的地点名称
本文介绍如何在Android中从图片提取地理位置信息并转换为地址。首先利用`ExifInterface`获取图片内的经纬度,然后通过`Geocoder`将经纬度转为地址。注意操作需在子线程进行且考虑多语言支持。
242 4
|
4月前
|
XML 前端开发 Android开发
Android经典实战之Kotlin中实现圆角图片和圆形图片
本文介绍两种实现圆角图像视图的方法。第一种是通过自定义Kotlin `AppCompatImageView`,重写`onDraw`方法使用`Canvas`和`Path`进行圆角剪裁。第二种利用Android Material库中的`ShapeableImageView`,简单配置即可实现圆角效果。两种方法均易于实现且提供动态调整圆角半径的功能。
73 0
|
6月前
|
API Android开发 开发者
`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView
【6月更文挑战第26天】`RecyclerView`是Android API 21引入的UI组件,用于替代ListView和GridView。它提供高效的数据视图复用,优化的布局管理,支持多种布局(如线性、网格),并解耦数据、适配器和视图。RecyclerView的灵活性、性能(如局部刷新和动画支持)和扩展性使其成为现代Android开发的首选,特别是在处理大规模数据集时。
66 2
|
6月前
|
SQL XML 数据库
后端数据库开发高级之通过在xml文件中映射实现动态SQL
后端数据库开发高级之通过在xml文件中映射实现动态SQL
52 3