android四捨五入
⑴ 關於android Math.round方法四捨五入的問題
電腦不會四捨五入,他執行的僅僅是簡單的保留幾位小數而已
⑵ 安卓app設計屏幕解析度適配問題怎麼解決
想要Android應用適應不同尺寸的屏幕,思路如下:
一:不同的layout
Android手機屏幕大小不一,有480x320, 640x360, 800x480,讓app適應不同屏幕,需要在res目錄下創建不同的layout文件夾,比如layout-640x360,layout-800x480,所有的layout文件在編譯之後都會寫入R.java里,而系統會根據屏幕的大小自己選擇合適的layout進行使用。
二:hdpi、mdpi、ldpi
在之前的版本中,只有一個drawable,而2.1版本中有drawable-mdpi、drawable-ldpi、drawable-hdpi三個,這三個主要是為了支持多解析度。
drawable- hdpi、drawable- mdpi、drawable-ldpi的區別:
(1)drawable-hdpi裡面存放高解析度的圖片,如WVGA (480x800),FWVGA (480x854)
(2)drawable-mdpi裡面存放中等解析度的圖片,如HVGA (320x480)
(3)drawable-ldpi裡面存放低解析度的圖片,如QVGA (240x320)
系統會根據機器的解析度來分別到這幾個文件夾裡面去找對應的圖片。
更正:應該是對應不同density 的圖片
在開發程序時為了兼容不同平台不同屏幕,建議各自文件夾根據需求均存放不同版本圖片。
屏幕方向:
橫屏豎屏自動切換:
可以在res目錄下建立layout-port-800x600和layout-land兩個目錄,裡面分別放置豎屏和橫屏兩種布局文件,這樣在手機屏幕方向變化的時候系統會自動調用相應的布局文件,避免一種布局文件無法滿足兩種屏幕顯示的問題。
不同解析度橫屏豎屏自動切換:
以800x600為例 :
可以在res目錄下建立layout-port-800x600和layout-land-800x600兩個目錄
不切換:
以下步驟是網上流傳的,不過我自己之前是通過圖形化界面實現這個配置,算是殊途同歸,有空我會把圖片貼上來。
還要說明一點:每個activity都有這個屬性screenOrientation,每個activity都需要設置,可以設置為豎屏(portrait),也可以設置為無重力感應(nosensor)。
要讓程序界面保持一個方向,不隨手機方向轉動而變化的處理辦法:
在AndroidManifest.xml裡面配置一下就可以了。加入這一行android:screenOrientation="landscape"。
例如(landscape是橫向,portrait是縱向):
Java代碼:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.ray.linkit"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Main"
android:label="@string/app_name"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".GamePlay"
android:screenOrientation="portrait"></activity>
<activity android:name=".OptionView"
android:screenOrientation="portrait"></activity>
</application>
<uses-sdk android:minSdkVersion="3" />
</manifest>
另外,android中每次屏幕的切換動會重啟Activity,所以應該在Activity銷毀前保存當前活動的狀態,在Activity再次Create的時候載入配置,那樣,進行中的游戲就不會自動重啟了!
有的程序適合從豎屏切換到橫屏,或者反過來,這個時候怎麼辦呢?可以在配置Activity的地方進行如下的配置android:screenOrientation="portrait"。這樣就可以保證是豎屏總是豎屏了,或者landscape橫向。
而有的程序是適合橫豎屏切換的。如何處理呢?首先要在配置Activity的時候進行如下的配置:android:configChanges="keyboardHidden|orientation",另外需要重寫Activity的 onConfigurationChanged方法。實現方式如下,不需要做太多的內容:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
// land do nothing is ok
} else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
// port do nothing is ok
}
}
寫一個支持多分辨的程序,基於1.6開發的,建立了三個資源文件夾drawable-hdpi drawable-mdpi drawable-ldpi,裡面分別存放72*72 48*48 36*36的icon圖標文件。當我在G1(1.5的系統)上測試時,圖標應該自適應為48*48才對啊,但實際顯示的是36*36。怎麼才能讓其自適應 48*48的icon圖標呢
解決辦法 drawable-hdpi drawable-mdpi drawable-ldpi改成drawable-480X320 drawable-800X480的多分辨支持的文件夾
⑶ android如何保留小數點後x位數字
static long round(double a) Returns the closest long to the argument.
static int round(float a) Returns the closest int to the argument
精確的,是這樣.
/**
* 提供精確的小數位四捨五入處理。
*
* @param v
* 需要四捨五入的數字
* @param scale
* 小數點後保留幾位
* @return 四捨五入後的結果
*/
public static double round(Double v, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
BigDecimal b = null == v ? new BigDecimal("0.0") : new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
⑷ Android界面布局怎麼樣適應不同解析度的手機
各種Android操作系統的手機簡直就是琳琅滿目,屏幕解析度的差異可想而知。目前比較主流的有WVGA=800x480,HVGA=480x320,另外的還有QVGA=320x240。當然還有魅族M9的DVGA=960x640,還有蛋疼的摩托羅拉的FWVGA=854x480。
其實,在你layout的xml文件中,編寫的時候是不是用了許多的padding呢?如果是,那你就蛋疼了。因為這樣的布局永遠是無法適應所有手機屏幕的。
正確的做法應該是使用的是weight屬性。將你控制項的layout中的width、height設置為fill-parent,不要使用wrap——content。因為wrap-content的大小是不固定的。而weight(權重)這個屬性很好的解決了這個問題。
當包裹在控制項外面的Layout的width、height屬性都設置為fill-parent時,可以利用weight的反比特性。即如果控制項A設置weight為5,控制項B設置weight為7,那麼A所佔的空間為5/(5+7),B所佔的空間為7/(5+7)。這樣的反比屬性對任何解析度下的手機都是合適的。
當然,字體就不行了。那怎麼保證字體能夠跟布局一樣能夠自適應呢?
呵呵,很簡單,就是在你的res文件夾中創建一個文件夾,叫做values-320x240。其中320x240是你手機屏幕的解析度,根據你手機屏幕的情況做不同的命名,例如values-800x480。在該文件夾下創建一個dimens.xml文件,定義各種字體的大小。那麼系統就會自動根據你手機屏幕的解析度去調用響應的文件夾。
另外,值得提醒的是,記得在你默認的values文件下的dimens.xml文件中也要寫上相應的字體大小哦,因為當系統無法認識你手機屏幕大小的時候,它會自動去找你默認文件中的
東西,沒有寫的話程序會崩潰。
************************************************************分割線************************************************************
在看下面內容之前首先請看你SDK文檔中以下這篇文章
其實google在解析度適應性的東西已經寫的很清楚了,只是我們很多人沒去看而已
以下是結論:
屏幕解析度:1024x600
density:1(160)
文件夾:values-mdpi-1024x600
屏幕解析度:1024x600
density:1.5(240)
文件夾:values-hdpi-683x400 由1024/1.5 600/1.5得到,需要四捨五入。
屏幕解析度:800x480
density:1(160)
文件夾:values-mdpi-800x480
屏幕解析度:800x480
density:1.5(240)
文件夾:values-hdpi-533x320 由800/1.5 480/1.5得到,需要四捨五入。
以此類推
一般情況下需要創建出values 、values-mdpi 、 values-hdpi文件夾,以備在一些沒有規定的尺寸屏幕上找不到資源的情況。
然後在裡面使用不同的dimens文件,Layout中不要使用顯示的數字,所有的尺寸定義全都援引dimens裡面的內容。
這樣能夠保證深度UI定製的情況
另外在工程的default.properties中如果split.density=false,則解析度適配的時候文件夾命名不需要與scale相除
例
屏幕解析度:800x480
density:1.5(240)
文件夾:values-hdpi-800x480
************************************************************分割線************************************************************
關於dimens
位置:res\values
單位:px Pixel 以畫面的像素為單位;
in Inches以畫面的多少英寸為單位;
mm Millimeter以畫面的多少毫米為單位;
pt Points 一點為1/72英寸;
dp或dip Density-indepentdent 為160dpi屏幕的一個pixel;
ap Scale-independent Pixels 隨屏幕尺寸改變的一個pixel;
1.drawable: 存放不同解析度對應圖片
在2.1版本中有drawable-mdpi、drawable-ldpi、drawable-hdpi三個,這三個主要是為了支持多解析度。
drawable- hdpi、drawable- mdpi、drawable-ldpi的區別:
(1)drawable-hdpi裡面存放高解析度的圖片,如WVGA (480x800),FWVGA (480x854)
(2)drawable-mdpi裡面存放中等解析度的圖片,如HVGA (320x480)
(3)drawable-ldpi裡面存放低解析度的圖片,如QVGA (240x320)
系統會根據機器的解析度來分別到這幾個文件夾裡面去找對應的圖片。
在2.1之前的版本可以通過drawable-800x480, drawable-480x320 等方式實現。
2:layout:放置對應不同解析度的布局
創建不同的layout文件夾, layout-800x480,layout-480x320, 系統會根據屏幕的大小自己選擇合適的layout進行使用。
另外:可以在res目錄下建立layout-port和layout-land兩個目錄,裡面分別放置豎屏和橫屏兩種布局文件。
下面列出主流的android機型有:
240x320低端,國產入門級採用,例如HTC G4,G8
320x480中端,大部分基於此解析度,例如HTC G1,G2,G3,G6, MOTO ME600, SAMSUNG I7500
480x800中高端,大部分基於此解析度,例如HTC G5,G7, MOTO MT810
480x854MOTO特有的,例如Droid, Milestone, XT800
960x640, 魅族M9
⑸ excel表做的電話簿導入安卓手機後,在手機中號碼最後一位總是四捨五入
可能是文本的格式問題,你把號碼換做文本格式的,然後把文檔保存為csv後綴的文件,然後導入。
另外,如果是從智能手機導入到智能手機的話,用豌豆莢之類的手機助手導入保存,然後再導入就可以了。最笨的辦法,把通訊錄從手機或SD卡導入到SIM卡就行了。
⑹ android中math.round方法在ios中怎麼使用
Android中Math類中提供了三個與取整有關的方法:
分別是ceil、floor、round,這些方法的作用與它們的英文名稱的含義相對應
ceil的英文解釋是天花板,該方法就表示向上取整,所以,Math.ceil(16.2)的結果為16,Math.ceil(-16.2)的結果是-16;
floor的英文解釋是地板,所以該方法就表示向下取整,那麼Math.floor(16.6)的結果為16,Math.floor(-16.6)的結果是-17;
round方法比前兩個稍微復雜一點,它表示「四捨五入」,演算法為Math.floor(x+0.5),即將原來的數字加上0.5後再向下取整,所以,Math.round(16.2)的結果為17,Math.round(-16.2)的結果為-16.
⑺ 如何解決android設備的適配問題
一、一些基本概念
1、長度(真實長度):英寸、inch
2、解析度:density 每英寸像素數 dpi(密度)
3、像素:px
4、dip的公式:px /dip=dpi/160 所以 dip 類似於英寸、長度(dp=dip,sp類似於dip) dip=160*inch
dip= 160/dpi * px
當dip一定時,dpi 越大,px就越大
5、廣義解析度=長px*寬px
二、常用規律
1、平時我們說 手機的解析度是 320*480的,其實的這里的解析度是相對解析度
意思是:水平方向上的像素數是320,垂直方向上像素數是480,
解析度是160(默認是160,意思是每英寸像素數160)
那麼水平方向:320 /160=2英寸
垂直方向:480/160=3英寸
於是乎 屏幕對角線 是根號下4*9=3.6(這就是常說的3.6英寸屏幕)
2、說一個手機的屏幕參數有三個:長寬像素之積(相對解析度)、真實解析度(dpi)、對角線長度
3、模擬器的解析度都是160,所以像素越大,屏越大
4、l、m、h 三個文件夾是按 真是解析度dpi 來對應找文件的。
5、有三種方案解決屏幕適配
(1)按像素比 y/開發時用的屏幕像素=x/用戶設備像素
(2)按長度 用dip(假設屏幕尺寸基本不變)
(3)按密度 放在l、m、h文件夾(假設屏幕尺寸基本不變,dpi越大 px越大)
6、如果手機是hdpi,但hdpi里沒有東西,l里有東西,程序就會去l里找圖片並且把它按比例放大。
7、最全的辦法:單獨適配
屏幕解析度:1024x600
density:1(160)
文件夾:values-mdpi-1024x600
屏幕解析度:1024x600
density:1.5(240)
文件夾:values-hdpi-683x400 由1024/1.5 600/1.5得到,需要四捨五入。
屏幕解析度:800x480
density:1(160)
文件夾:values-mdpi-800x480
屏幕解析度:800x480
density:1.5(240)
文件夾:values-hdpi-533x320 由800/1.5 480/1.5得到,需要四捨五入。
以此類推
一般情況下需要創建出values 、values-mdpi 、 values-hdpi文件夾,以備在一些沒有規定的尺寸屏幕上找不到資源的情況。
⑻ android 誰能解釋下這段代碼什麼意思
程序的意義:把浮點的千分位進行四捨五入,
這種演算法的實用意義並不大,因為浮點數並不是十進製表示的,是不精確的,
當重新轉換成浮點數後,也是不精確的,浪費了計算時間,只有最終轉換成
十進制字元串時才有實用意義。
先將數字前推兩位,然後強制轉型成整形丟失後面的位數。然後做差得到相差的數值。一個判斷是來判斷第三位(已經進了兩位咯)是大於5的還是小於5的,大於五就進位。最後進行還原,返回四捨五入的數值。
比如: 13.36 很可能重新變成 12.359999999998 之類的情況
這段代碼是一個if函數,double的具體長度可以根據資料進行詳細查找就可以了。
⑼ 關於Android 中 Options.inSampleSize怎麼用
這個是讀取bitmap時用到的屬性,是為了對原圖降采樣.
比如原圖是一個 4000 * 4000 點陣的圖,佔用內存就是 4000 * 4000 * 單個像素佔用位元組數
單個像素佔用位元組數取決於你用的是 RGB565, ARGB8888 等. 4000 * 4000 這個解析度已很接近目前市面主流機器的默認照片解析度.
假設你用的是RGB565解析這張圖,那一個點就佔用2個位元組.如果完整解析這個圖片,就需要 大約3.2MB的內存.
如果你用了一個GridView,同時顯示了30張這種圖,那幾乎可以確定你會收到一個OOM異常.
所以需要對這種大圖進行降采樣,以減小內存佔用.畢竟拇指大小的地方根本用不著顯示那麼高的解析度.
因為直接從點陣中隔行抽取最有效率,所以為了兼顧效率, inSampleSize 這個屬性只認2的整數倍為有效.
比如你將 inSampleSize 賦值為2,那就是每隔2行采1行,每隔2列采一列,那你解析出的圖片就是原圖大小的1/4.
這個值也可以填寫非2的倍數,非2的倍數會被四捨五入.
綜上,用這個參數解析bitmap就是為了減少內存佔用.
一下是我的一個根據指定大小對圖片文件降采樣讀取的一個函數,供參考.
/**
* author: liuxu
* de-sample according to given width and height. if required width or height is
* smaller than the origin picture's with or height, de-sample it.
* NOTE: if image quality is your first concern, do not use this method.
* @param path full path for the picture
* @param width the required width
* @param height the required height
* @return bitmap
*/
public static Bitmap decodeBitmapForSize(String path, int width, int height) {
final BitmapFactory.Options options = new BitmapFactory.Options();
if (width != 0 && height != 0) {
// decode with inJustDecodeBounds=true to check size
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(path, options);
// calculate inSampleSize according to the requested size
options.inSampleSize = calculateInSampleSize(options, width, height);
options.inJustDecodeBounds = false;
}
// decode bitmap with the calculated inSampleSize
options.inPreferredConfig = Config.RGB_565;
options.inPurgeable = true;
options.inInputShareable = true;
return BitmapFactory.decodeFile(path, options);
}
/**
* author: liuxu
* de-sample according to given width and height
* @param options options
* @param reqWidth the required width
* @param reqHeight the required height
* @return the calculated sample size
*/
private static int calculateInSampleSize(BitmapFactory.Options options,
int reqWidth, int reqHeight) {
// raw height and width of image
final int height = options.outHeight;
final int width = options.outWidth;
int initSize = 1;
if (height > reqHeight || width > reqWidth) {
if (width > height) {
initSize = Math.round((float) height / (float) reqHeight);
} else {
initSize = Math.round((float) width / (float) reqWidth);
}
}
/*
* the function rounds up the sample size to a power of 2 or multiple of 8 because
* BitmapFactory only honors sample size this way. For example, BitmapFactory
* down samples an image by 2 even though the request is 3.
*/
int roundedSize;
if (initSize <= 8) {
roundedSize = 1;
while (roundedSize < initSize) {
roundedSize <<= 1;
}
} else {
roundedSize = (initSize + 7) / 8 * 8;
}
return roundedSize;
}
⑽ android中如何實現除法的保留小數點後2位,四捨五入!
android實現保留小數點後2位,四捨五入,就是java語言的實現,可以使用java提供的round(double a)函數,實現四捨五入的計算。
public static double round(Double v, int scale) {
if (scale < 0) {
throw new IllegalArgumentException("The scale must be a positive integer or zero");
}
BigDecimal b = null == v ? new BigDecimal("0.0") : new BigDecimal(Double.toString(v));
BigDecimal one = new BigDecimal("1");
return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
BigDecimal 這個類是在jdk4.0之後引入的,目的就是為了獲得更精確的小數位,以便於計算。