小菜最近因工作需要做乙個支付金額對話方塊的小模組,技術很淺顯,遇到幾個小坑,分享給大家~
需求小菜遇到的坑之一:
其他頁面中獲取到的金額需要儲存兩位小數,本來我打算直接用 string 轉為 double 型別,但是遇到儲存精度問題(string=19.99 ->double=19.98),所以借鑑bigdecimal 方式,如圖:
string->double精度轉換
小菜遇到的坑之二:
只可保留兩位小數,即有兩位小數後再輸入不顯示;若先輸入乙個長度,例如1234,移動游標,再在1234之間點小數點,只可有12.34或123.4或1234.而不可是1.234
小菜遇到的坑之三:
時時判斷輸入金額不可大於10000,自己用了乙個很low的方法:
時時判斷金額
直接上關鍵**吧(依舊很low,僅供借鑑)
final edittext amountet = butterknife.findbyid(view, r.id.pay_view_amount_tv);
double amountdouble = double.parsedouble(amount);
bigdecimal bignum = new bigdecimal(amountdouble);
amountet.settext(bignum.setscale(2, bigdecimal.round_half_up) + "");
amountet.setfilters(new inputfilter else
//驗證小數點精度,保證小數點後只能輸入2位
int index = desttext.indexof(".");
int length = dend - index;
if (dest.tostring() != null && dest.tostring().length() > 0 && dest.tostring().contains("."))
} else if (amoarr.length > 1 && amoarr[amoarr.length - 1].length() >= 2)
if (length > 10)
} else else
string amoarr = (dest.tostring()).split("\\.");
int indexpoint = dest.tostring().indexof(".");
if (dstart <= indexpoint) else if (amoarr.length > 1 && amoarr[amoarr.length - 1].length() >= 2) else if (source.equals(".") && dest.tostring().length() - dstart > 2) else if (tempamo > 0.00 && tempamo <= 9999.99) else else else {
toastutils.showshort(mcontext, "請輸入一定金額");
// 取消讚賞
textview tvpaycancel = butterknife.findbyid(view, r.id.pay_view_cancel_tv);
tvpaycancel.setonclicklistener(new view.onclicklistener() {
@override
public void onclick(view v) {
materialdialog.dismiss();
效果圖
Android 輸入框限制字元輸入數
有時候對android的輸入框有字元輸入數量的限制,並且顯示字元輸入的數量。通過以下方式可以實現 import android.content.context import android.content.res.typedarray import android.telephony.smsmess...
輸入框輸入金額
用法 第一種 inputfilter filters edshopprice.setfilters filters edmarketprice.setfilters filters 第二種 edshopprice.setfilters new inputfilter edmarketprice.se...
js價格金額輸入限制 (無精度 科學計數法問題)
1 基本input都是進行字串驗證限制,因為轉金額驗證會更麻煩,處理大數值的問題 2 超過16位的數值都會有精度問題,因為計算機的進製是二進位制,進製是按二進位制,不是十進位制的四捨五入,同時js支援的數值位數有限 引入bignumber處理超過16位的數值 bignumber相關用法 格式限制 必...