zoukankan      html  css  js  c++  java
  • 【转】Android 为什么 dp2px 或 px2dp 公式需要加 0.5f

    转自:http://blog.csdn.net/changcsw/article/details/52440543

    网上 dp2px 和 px2dp 公式:

    [java] view plain copy
     
    1. public static int px2dip(Context context, float pxValue) {    
    2.      final float scale = context.getResources().getDisplayMetrics().density;    
    3.      return (int) (pxValue / scale + 0.5f);    
    4. }    
    5.       
    6. public static int dip2px(Context context, float dipValue) {    
    7.      final float scale = context.getResources().getDisplayMetrics().density;    
    8.      return (int) (dipValue * scale + 0.5f);    
    9. }  

    这两个公式网上很多,但为什么 最后都要加上0.5f 呢?

     按正常的推理应该是  dip = pxValue / scale 和 px = dipValue * scale ,

    实际上准确的值就应该是 咱们推理出来的,之所以后面加上0.5f是因为 咱们要的只不是那么精准,根据推理算出来的是个浮点数,而咱们程序中一般使用int类型就够了,这里涉及到一个类型转换精准度问题,熟悉java特效的同学应该知道

    float 类型的 4.1 和4.9 强转成int类型后,会失去精准度变成 int类型的4, 而如果咱们想四舍五入的话,把他们都加上0.5f,这样转换出来的结果就是:

    4.4 + 0.5 = 4.9 转为int 还是4,而4.5 + 0.5 = 5.0 转换成int后就是5,正好是四舍五入,这样就保证了咱们算出来的值相对精准。

  • 相关阅读:
    mysql中文乱码
    阻止保存要求重新创建表的更改
    PowerDesigner连接数据库(Oracle)
    PowerDesigner连接数据库(SqlServer)
    Environment Variable: "PATH" 失败
    pl/sql查看锁表及解锁
    Oracle将误闪的数据认回到指定的时间段
    内存监测2
    Windows常用的一些DOC命令
    何为序列化
  • 原文地址:https://www.cnblogs.com/cappuccino/p/7594663.html
Copyright © 2011-2022 走看看