- 投稿日:2019-04-15T17:51:37+09:00
java kotlin IntとIntの除算(割り算)にご注意
なんでこんな簡単なことにハマったのでしょう?
私と同じようにハマって時間を無駄にする方がいないように備忘録下記は当然の如く0.25と出ると思っていましたが...
var rate: Double = 0.0 rate = 1 / 4 Log.v("TEST:", "rate:${rate}")下記のようなコンパイルエラーがでる。
Type mismatch: inferred type is Int but Double was expectedgoogle翻訳様:「型が一致しません:推定型はIntですがDoubleが必要です」
そんなことわかっておるワイ!!!
ん? あっ Σ(゚д゚;) ,,,, そういう事か。
IntとIntの計算なので計算結果の型の判定がIntになっていたんですね...
俺よ、なぜ気づかなかった。。。ということで解決策。どっちか、もしくは両方をDoubleに合わせてやればよい。
val num1 = 1.toDouble() val num2 = 4.toDouble() val aaa = num1 / num2 Log.v("TEST:", "rate = ${aaa}")V/TEST:: rate = 0.25はい。想定どおりの結果が返ってきました。
自分の頭の悪さに涙が止まらんです。補足
ちなみに...
val aaa = (1/4).toDouble() Log.v("TEST:", "rate = ${aaa}")V/TEST:: rate = 0.0こうすると 計算結果がIntで来てそれをDoubleに変換しているみたいになるから
想定する結果が返ってきません。
10 / 4
とかだと2.0
になるから注意。では、よい kotlin 生活を!
- 投稿日:2019-04-15T16:42:00+09:00
BottomSheetDialogFragmentで全画面表示だけ有効にしたい
目的
BottomSheetDialogFragmentで全画面表示だけ有効にしたい
コード
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val dialog = super.onCreateDialog(savedInstanceState) as BottomSheetDialog dialog.setOnShowListener { dialog -> val d = dialog as BottomSheetDialog val bottomSheet = d.findViewById(com.google.android.material.R.id.design_bottom_sheet) as FrameLayout? val behavior = BottomSheetBehavior.from(bottomSheet) behavior.state = BottomSheetBehavior.STATE_COLLAPSED behavior.setBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() { override fun onSlide(bottomSheet: View, slideOffset: Float) { //何もしない } override fun onStateChanged(bottomSheet: View, newState: Int) { //この条件分岐追加しないと画面が消えた後モーダルの半透明黒マスクだけが残る if (newState == BottomSheetBehavior.STATE_HIDDEN) { dismiss() behavior.state = BottomSheetBehavior.STATE_COLLAPSED } //途中で止まろうとするので強制的に全画面表示する else if (newState == BottomSheetBehavior.STATE_COLLAPSED) { behavior.state = BottomSheetBehavior.STATE_EXPANDED } } }) //下から出てきて全画面表示されるようにする behavior.state = BottomSheetBehavior.STATE_EXPANDED }