發表文章

【 Android 】float / double 計算失去精度

圖片
今天在數值運算的時候,發現一個問題: getValue = 1619; seekbarInvalue = getValue * 0.01 ; seekbarInvalue += 0.1 ; 運算出來的結果是: 為什麼浮點數會失去精度? A: 二進制表示可能不夠精確,浮點數值沒辦法用十進制來精確表示的原因可能是cpu表示的浮點數的方法,若是這樣就需要在運算的時候犧牲一些精度; 例如2.4的二進制表示並非是2.4,而是最接近的表示是 2.3999999999999999。 您可以使用Binary Coded Decimal (BCD)来保持精度。BCD數字編碼方法會把每一个十進制數字單獨編碼; BCD碼的主要優點是在機器格式與人可讀的格式之間轉換容易,以及十進制數值的高精度表示。BCD碼的主要缺點是增加了實現算術運算的電路的複雜度,以及儲存效率低。 而在android裡有以下方法可以運算浮點數: 1.  Math . round ( value * 100 ) / 100.0;   // 返回x最接近的整数,如果x的小数部分大于等于0.5,返回值是大于x的最小整数,否则round函数返回小于等于x的最大整数 2.  Math . floor ( seekbarInvalue * 100 ) / 100.0;  // Math.floor()方法會傳回小於或等於給定數值(輸入參數)的最大整數。 3.  DecimalFormat df = new DecimalFormat ( "#0.00" ) ;    double Value = new Double ( df . format ( value )) ; // DecimalFormat用法 4. 使用 math.BigDecimal 的運算是精度較高的方式,並且一定要轉作string /**      * 提供精确的加法运算。      * @param v1 被加数      * @param v2 加数   ...

臍帶血

由於自已的寶寶快要出生了,而有長輩建議我們去儲存臍帶血,但由於目前儲存臍帶血的話題非常新穎和熱門,但我相信大部份的家長還是會搞不清楚是否儲存臍帶血,儲存臍帶血要幹嘛?儲存了是否真的有用? ; 我自已也是這一部份的家長,所以利用了一點點的時間上網爬了一下文章,在這裡與大家分享一下, 如果有錯誤再請大家不吝指教,非常感謝 。 一、何謂臍帶血?          嬰兒出生後留在胎盤與臍帶靜脈的血,即為臍帶血 。傳統上胎盤在生產完後立即丟棄。 二、為何要儲存臍帶血?         臍帶血富含「零歲」的「幹細胞」,幹細胞是一種介於胚胎細胞和分化細胞的中間細胞,是一群未分化的細胞,具有再生新細胞及分化特定的組織器官的能力 ,於是具有無限制的分裂能力,可分化成特定組織 。 如同骨髓一樣,臍帶血中含有豐富且是最接近胚胎的幹細胞,稱為造血幹細胞。它能製造人體血液、骨髓與免疫系統內的主要成分。       臍帶血造血幹細胞可以用來治療白血病、淋巴瘤、地中海型貧血、黏多醣症、血液再生不良、先天性免疫不全及自體免疫疾病,也可以在癌症化學治療或放射線治療後,幫助病人造血系統的再生。間質幹細胞具有分化成脂肪、軟骨細胞、硬骨細胞、星形細胞、肌腱細胞、造血細胞支持基質、骨骼肌細胞、平滑肌細胞、心肌細胞、神經細胞及神經膠質細胞的功能,因此臍帶血具有造血功能和修補組織的用途。 三、到底需不需要儲存臍帶血?         臍帶血儲存的用途,一直有「自存自用」或「互助醫療」等不一的看法,  但是 據美國紐約捐血中心的估計,新生兒將來需要用到自己臍帶血的機率是1/10000,而美國國家衛生研究院估計自存自用的比率只有1/20000 。目前全世界已有200家公私立的臍帶血庫,非親屬間的臍帶血移植超過數千例,手足間的臍帶血移植也有數百例,自體移植機率更是小,如果成年人需要臍帶血移植,現今會面臨臍帶血量不足的問題,需合併使用他人的臍帶血。        目前台灣3個公益性質的臍帶血庫,累計的臍帶血達17400袋。而發展較早的日本的臍帶血庫有11家,完成4000例臍帶血移植,同時對臍...

【 Android 】GridLayout

圖片
繼上篇 Grid View 之後,順便測試一下android 4.0以上才有的grid layout,這裡也拿計算機的 鍵盤來當排版練習: 一、首先先建立gridlayout < GridLayout xmlns:android = "http://schemas.android.com/apk/res/android"     xmlns:tools = "http://schemas.android.com/tools"     android:layout_width = "wrap_content"     android:layout_height = "wrap_content"     android:layout_gravity = "center"     android:columnCount = "4"     android:orientation = "horizontal" > 這裡指定為"4列",並且是水平排列 二、接下來就將每個按鍵按順序排列出來 ,這裡需注意元件排列的順序,是按照順序排列的,跟linearlayout的用法是一樣的。      < Button         android:layout_width = "wrap_content"         android:layout_height = "wrap_content"         android:text = "1" />     < Button         android:layout_width = "wrap_content"         android:layout_height = "wrap_content"       ...

【 Android 】Grid View

Grid View顧名思義就是格子式的視圖,其實跟list view差不多意思,只是有時候想要呈現成格狀的樣式的時候就會使用gridview。 下列是比較常使用的方法,可以參考: 一、首先先在Main layout上建立一個grid view的標籤: < GridView xmlns:android = "http://schemas.android.com/apk/res/android"     android:id = "@+id/gridview_type"     android:layout_width = "match_parent"     android:layout_height = "wrap_content"     android:columnWidth = "120dp"     android:gravity = "center"     android:horizontalSpacing = "30dp"     android:numColumns = "3"     android:stretchMode = "columnWidth"     android:verticalSpacing = "30dp" > </ GridView > ps:這裡有幾樣特性是gridview獨有的: 1. android:numColumns:表示每一橫列要展示的個數(若為auto_fit,似乎就是設為一行三個) 2. android:verticalSpacing:行跟行的間距 3. android:horizontalSpacing:列跟列的間距 4. android:columnWidth:每一格的寬度 5. android:stretchMode:格子拉伸模式                        none:不要伸縮 ...

【 Android 】防止系統進入休眠和螢幕恆亮

一、防止系統進入休眠 1、在Manifest.xml裡面用user-permission。程式碼如下: < uses-permission android:name = "android.permission.WAKE_LOCK" /> 這種方法,在安裝apk時,系統會提示安裝人是允許使用禁止睡眠功能。 2、在程式中用程式碼實現。程式碼如下: getWindow () . addFlags ( WindowManager . LayoutParams . FLAG_KEEP_SCREEN_ON ) ;   把這段程式碼加在setContentView(R.layout.main)之前即可   這種方法,安裝時,不會提示安裝人是否允許使用禁止休眠功能 二、螢幕恆亮 加入下列程式即可以讓螢幕恆亮 getWindow () . addFlags ( WindowManager . LayoutParams . FLAG_KEEP_SCREEN_ON ) ;

【 Android 】Google Map V3 使用 (二) 定位

繼上篇步驟完成後,已經可以看到地圖,只是位置並不是想像中是在目前裝置的位置,是因為沒有定位到目前裝置的位置,要定位的話則必需先取得目前位置的經緯度再告知Google Map,使它可以移動到該經緯度,步驟如下: 一、先產生定位相關元件: 先新增定位需要的權限 < uses-permission android:name = "android.permission.ACCESS_FINE_LOCATION" /> < uses-permission android:name = "android.permission.ACCESS_COARSE_LOCATION" /> < uses-permission android:name = "android.permission.INTERNET" /> 再產生相關元件 public static LocationManager lmgr ;  //取得location service public static MyLocationListener mll ; //這是位罝改變時的監聽事件 二、取得location service之後並新增監聽事件和建立service: lmgr = ( LocationManager ) getSystemService ( LOCATION_SERVICE ) ; mll = new MyLocationListener () ; lmgr . requestLocationUpdates ( LocationManager . NETWORK_PROVIDER , 1100 , 0 , mll ) ; //上述是開啟網路定位服務 lmgr . requestLocationUpdates ( LocationManager . GPS_PROVIDER , 1100 , 0 , mll ) ; //上述是開啟gps定位服務 上述兩個方法所帶入的參數如下: 定位提供者:  LocationManager . NETWORK_PROVIDER /  LocationManag...

【 Android 】Google Map V3 使用 (一)

圖片
Google自2012.12.3起聲明不支援Map API V1,即不再增加新功能,到2013.3.3前仍接受申請Map API V1 key。Map API V2改用com.google.android.gms.maps.MapFragment,仍需申請Map API V2 key;Google Map API V3則改為Javascript API方式,使用WebView來顯示Google Map,應用程式不需再申請Google Map API key,但同一頁面免費存取次數為25000次/天。 一、雖然是不需要申請api key,但在一開始使用的時候還是需要利用"開發者帳號"到API控制台去取得一組金鑰使用,操作可以參考下列網頁上的" 如何建立 API 金鑰:"步驟取得: 取得金鑰 ;若是沒有在Simple API Access上看到金鑰,則可以按下"Create new Browser Key"取得: 二、在專案底下的assets資料夾下產生一個html檔,用來顯示google map,檔案內容如下: <!DOCTYPE html > <html> <head> <meta name=" viewport " content="initial-scale=1.0, user-scalable=no" /> <style type="text/ css "> html { height: 100% } body { height: 100%; margin: 0; padding: 0 } #map_canvas { height: 100% } </style> <script type="text/ javascript " src ="http://maps.googleapis.com/maps/api/jsv=3&key= API_KEY &sensor=false"...