转自:http://blog.csdn.net/changcsw/article/details/52440543java
网上 dp2px 和 px2dp 公式:spa
这两个公式网上不少,但为何 最后都要加上0.5f 呢?.net
按正常的推理应该是 dip = pxValue / scale 和 px = dipValue * scale ,blog
实际上准确的值就应该是 我们推理出来的,之因此后面加上0.5f是由于 我们要的只不是那么精准,根据推理算出来的是个浮点数,而我们程序中通常使用int类型就够了,这里涉及到一个类型转换精准度问题,熟悉java特效的同窗应该知道ip
float 类型的 4.1 和4.9 强转成int类型后,会失去精准度变成 int类型的4, 而若是我们想四舍五入的话,把他们都加上0.5f,这样转换出来的结果就是:get
4.4 + 0.5 = 4.9 转为int 仍是4,而4.5 + 0.5 = 5.0 转换成int后就是5,正好是四舍五入,这样就保证了我们算出来的值相对精准。it