Android InputNumWatcher工具类 一行代码实现2位小数限制 多位小数限制终结者,简单易懂好用。

基于 Qt 6 / C++17 的多算法加解密工具(学习研究用途) 涵盖编码、古典密码、对称/非对称加密、哈希摘要共 24 种算法,全部纯 C++ 自实现,不依赖 OpenSSL/GmSSL 基于 Qt 6 / C++17 的多算法加解密工具(学习研究用途)。涵盖编码、古典密码、对称/非对称加密、哈希摘要共 24 种算法,全部纯 C++ 自实现,不依赖 OpenSSL/GmSSL。含图形界面、批量文件加解密、密钥管理、性能测试与操作日志。提供标准测试向量自测。 立即下载

大家好,,日常开发中,金额一般需要做2位限制,折扣一般做一位小数限制,之前代码里面写了很多onaddTextChangeListener,整个代码看起来非常臃肿,复用性不佳,今天把它抽出一个工具类,希望能对大家有所帮助。

废话不多说,先上工具类,直接复制到你工具类的包即可。

/**
 * N位小数
 * Created by luomingjing on 2017/12/28.
 */
public class InputNumWatcher implements TextWatcher {
    public int MAX_LENGTH = 1;//整数数位最大长度
    public int MAX_PONIT_LENGTH = 1;//小数位最大长度
    EditText editText;
    String origin;

    //默认一位
    public InputNumWatcher(EditText editText) {
        this.editText = editText;
    }

    /**
     * MAX_LENGTH位小数输入限制
     *
     * @param MAX_LENGTH
     */
    public InputNumWatcher(EditText editText, int MAX_LENGTH) {
        if (MAX_LENGTH < 1) {
            this.MAX_LENGTH = 1;
        } else {
            this.MAX_LENGTH = MAX_LENGTH;
        }
        this.editText = editText;
    }

    public InputNumWatcher(EditText editText, int MAX_LENGTH, int MAX_PONIT_LENGTH) {
        if (MAX_LENGTH < 1) {
            this.MAX_LENGTH = 1;
        } else {
            this.MAX_LENGTH = MAX_LENGTH;
        }
        if (MAX_LENGTH < 1) {
            this.MAX_PONIT_LENGTH = 1;
        } else {
            this.MAX_PONIT_LENGTH = MAX_PONIT_LENGTH;
        }
        this.editText = editText;
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        origin = s.toString().trim();
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        String trim = s.toString().trim();
        if (!TextUtils.isEmpty(trim)) {
            if (trim.startsWith(".")&&trim.length()<=MAX_PONIT_LENGTH + 1){
                editText.setText(0+trim);
                try {
                    String trim1 = editText.getText().toString().trim();
                    editText.setSelection(trim1.length());
                } catch (Exception e) {
                    e.printStackTrace();
                }
                return;
            }
            if (trim.contains(".")) {
                String[] split = trim.split("\\.");
                if (split.length > 1) {
                    String s1 = split[1];
                    if (!TextUtils.isEmpty(s1)) {
                        if (s1.length() >= MAX_PONIT_LENGTH + 1) {
                            editText.setText(origin);
                            try {
                                String trim1 = editText.getText().toString().trim();
                                editText.setSelection(trim1.length());
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                            return;
                        }
                    }
                }
                if (split.length > 0) {
                    String s1 = split[0];
                    if (s1.length() > MAX_LENGTH) {
                        editText.setText(origin);
                        try {
                            String trim1 = editText.getText().toString().trim();
                            editText.setSelection(trim1.length());
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        return;
                    }
                }

            } else {
                if (trim.length() > MAX_LENGTH) {
                    editText.setText(origin);
                    try {
                        String trim1 = editText.getText().toString().trim();
                        editText.setSelection(trim1.length());
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                    return;
                }
            }

        }

    }

    @Override
    public void afterTextChanged(Editable s) {

    }
}

添加完工具类,下面来看看使用

edittext.addTextChangedListener(new InputNumWatcher(
edittext, 3, 2));
上面这行代码表示对edittext限制长度为3位(即最大值999),最多2位小数,当然你可以任意配置长度及小数位数。

一行代码就完了是不是很简单,喜欢的朋友就点个赞吧,谢谢!





考虑一次调频以及二次调频和各机组调频特性的双目标风光水火储动态调度研究(Matlab代码实现) 考虑一次调频以及二次调频和各机组调频特性的双目标风光水火储动态调度研究(Matlab代码实现)内容概要:本文研究了一种考虑一次调频、二次调频以及各机组调频特性的双目标优化模型,用于风光水火储多能互补系统的动态调度问题。该模型以系统运行成本最小化和新能源消纳最大化为双重优化目标,综合考虑了各类电源的出力特性、储能系统的充放电行为及电网频率响应要求。通过Matlab编程实现了完整的求解流程,采用多目标优化算法对复杂约束条件下的调度方案进行求解,并对不同场景下的调度结果进行仿真分析,验证了所提模型在提升系统经济性与稳定性方面的有效性。研究还探讨了储能系统在平抑新能源波动、参与频率调节中的关键作用,为高比例可再生能源接入下的电力系统调度提供了理论支持和技术路径。; 适合人群:具备一定电力系统基础知识和Matlab编程能力,从事新能源调度、电力系统优化等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①解决含多种能源形式的复杂电力系统在实际运行中的动态调度问题;②研究储能系统在调频和促进新能源消纳中的协同机制;③掌握多目标优化在电力系统调度中的建模与实现方法; 阅读建议:建议读者结合Matlab代码深入理解模型构建与求解过程,重点关注目标函数设计、约束条件处理及多目标折衷分析方法,同时可通过修改参数进行不同场景的仿真实验,以加深对系统动态行为的理解。 立即下载

相关推荐

图腾柱无桥PFC变换器+平均电流控制+PI电压双闭环前馈控制设计(Simulink仿真实现)

内容概要:本文系统研究了图腾柱无桥PFC变换器的高性能控制策略,采用平均电流控制与PI电压双闭环前馈控制相结合的方法,并基于Simulink平台构建了完整的仿真模型进行验证。文章深入剖析了控制系统的结构设计,重点阐述了电压外环与电流内环的协同工作机理,其中前馈控制的引入显著增强了系统对输入扰动的抑制能力和动态响应速度。通过仿真结果表明,该复合控制策略能够有效实现单位功率因数运行,大幅降低输入电流的总谐波畸变率(THD),同时确保直流母线电压具有优异的稳态精度和快速跟踪能力。本研究为高效率、高功率密度的PFC变换器设计提供了坚实的理论支撑和可靠的实践范例。; 适合人群:从事电力电子、电气自动化、新能源变换器研发的高校研究生、科研人员及企业工程师。; 使用场景及目标:①掌握图腾柱无桥PFC变换器的工作原理与建模方法;②深入理解平均电流控制、PI双闭环及前馈控制在电力电子系统中的综合应用;③学习使用Simulink进行电力电子变换器的系统级仿真与性能分析。; 阅读建议:建议读者结合文中提供的仿真模型,分模块(主电路、控制逻辑、调制环节)进行参数设置与仿真调试,重点关注电压环与电流环的动态响应、稳态精度以及THD指标的变化,以深化对控制策略的理解。

Android Input子系统-含实例源码

Android Input子系统-含实例源码 1 Input子系统作用 Android很多外设都是用到输入输出设备,比如touchscreen,键盘,音量键等,输入 设备对应Android 框架是Androidinput子系统,像我们定制类比较多的,很多需要...

a15233768673的博客 265

基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)

内容概要:本文系统研究了基于序贯蒙特卡洛模拟法的配电网可靠性评估方法,重点聚焦于其在含分布式电源的复杂配电网中的应用。文章深入阐述了该方法的理论基础与实现流程,通过建立配电网元件的故障与修复过程的时间序列模型,模拟系统在长期运行中的状态演变,进而精确统计系统及负荷点的关键可靠性指标,如系统平均停电频率(SAIFI)、系统平均停电持续时间(SAIDI)、用户平均停电时间(CAIDI)等。研究依托Matlab平台完成了完整的仿真程序开发,并通过典型算例验证了所提方法的有效性与工程实用性。该方法能够充分考虑系统的时序特性与元件间的相关性,尤其适用于高比例分布式电源接入后带来的随机性与波动性较强的新型配电网可靠性分析。; 适合人群:具备电力系统分析基础知识和一定Matlab编程能力的高校研究生、科研机构研究人员,以及从事配电网规划、运行维护与风险管理的工程技术人员。; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的核心原理与具体实施步骤;②学习如何利用Matlab进行配电网时序仿真建模与可靠性指标的自动化计算;③为含分布式电源的现代配电网的规划设计、运行风险评估及韧性提升提供科学的量化分析工具与技术支撑。; 阅读建议:建议读者结合文中提供的Matlab代码实现,逐行调试并运行仿真程序,深入理解状态抽样、时间推进、故障遍历、指标累加等关键算法环节,并鼓励尝试将其应用于不同的网络拓扑结构或引入更多类型的分布式电源模型,以深化对方法适应性与扩展性的理解。

Android - 金额工具类

直接上代码 package com.baofu.yunfutong.util; import android.content.Context; import android.text.Editable; import android.text.TextWatcher; import android.widget.EditText; import android.widget.Toast...

Beluga_白鲸 1318

基于多策略改进蜣螂算法(MSDBO)的多无人机协同三维避障路径规划研究(Matlab代码实现)

内容概要:本文研究基于多策略改进的蜣螂优化算法(MSDBO)在多无人机协同三维避障路径规划中的应用,旨在解决复杂环境下多无人机安全、高效飞行的路径规划问题。通过引入多种优化策略对传统蜣螂算法进行改进,显著增强了算法的全局搜索能力、收敛速度与避障性能,并结合三维空间建模与多无人机协同机制,构建以路径成本(如距离、高度、威胁、转角等)为目标函数的优化模型。文中系统阐述了算法设计原理、路径规划建模方法及仿真实验过程,通过多场景对比实验验证了MSDBO算法在路径安全性、规划效率和多机协同性方面的优越性与鲁棒性。; 适合人群:具备一定算法基础和MATLAB编程能力,从事无人机控制、路径规划、智能优化算法研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①解决城市、山区等复杂环境下的多无人机协同飞行路径规划问题;②提升无人机集群在动态障碍物环境中的自主避障与协同能力;③为智能交通、应急救援、军事侦察等领域的多智能体路径规划提供技术支持。; 阅读建议:建议结合提供的Matlab代码进行仿真实践,深入理解算法实现细节与参数调优方法,同时可尝试在不同场景下测试算法性能,进一步掌握其适用边界与优化潜力。

MOOS-ivp 实验一 MOOS软件的安装与执行

MOOS-ivp实验一 实验一步骤总结 文章目录MOOS-ivp实验一前言一、实验一1.下载软件2.安装必要的插件3.安装后检查4.路径添加5.执行示例文件总结 前言 在moos学习过程中,我觉得最好把学习的每一步骤都总结一下,方便日后进行回顾。moos官网设置了十八个实验,涉及到了moos的各个方面,完成这些实验也是moos入门的好办法。 一、实验一 实验一主要内容仅仅是软件的安装,仅仅这一步就花费了我接近两天的时间。主要问题发生在linux系统的配置问题上。 1.下载软件 svn co https:

weixin_44151170的博客 6672

Android工具类--日期工具

import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import com.richerpay.ryshop.log.KLog; /** * 时间日期格式化工具类 * */ public class T...

JustinNick的博客 1184

如何让Arduino IDE支持你手里的STM32 nucleo开发板

Arduino IDE开发环境在默认情况下不支持STM32 NUCLEO开发板,只有通过添加附加开发板管理包才能使用。目前为止,只有一部分板子支持使用Arduino IDE开发环境进行开发,分别是 Nucleo F207ZG, Nucleo F429ZI, Nucleo F030R8, Nucleo F091RC, Nucleo F103RB, Nucleo F303RE, Nucl...

mzw72188552的专栏 8972

Android 金额输入限定两位小数

1、EditText(限定输入类型) <EditText android:id="@+id/et_send_red_bag_amount" android:layout_width="0dp" android:layout_height="match_parent" android:layout_weight="1" android:backgro...

SEN_NO1的博客 938

4D Gaussian Splatting for Real-Time Dynamic Scene Rendering-4DGS阅读笔记

为了实现实时动态场景渲染,同时还能具备较高的训练和存储效率,作者提出了四维高斯溅射(4D-GS)方法,将其作为动态场景的一种整体表示方式,而不是对每个单独的帧应用三维高斯溅射(3D-GS)方法。在 4D-GS 中,提出了一种新颖的显式表示方法,它同时包含三维高斯模型和四维神经体素。受 HexPlane 启发,提出了一种分解的神经体素编码算法,以高效地从四维神经体素构建高斯特征,然后应用一个轻量级多层感知器(MLP)来预测在新时间戳下的高斯变形。

2403_85515624的博客 2343

解放双手,摆脱自建库的繁琐,立创EDA元件库转cadence原理图封装库实战技巧

解放双手,摆脱自建库的繁琐,立创EDA元件库转cadence原理图封装库实战技巧

u012790770的博客 3620

[已解决]EditText 代码中不能够添加小数点的属性 android:inputType="numberDecimal"

在代码中,我们试着给EditText添加小数点的属性 但是这个是因为没有这个常量,所以一开始的时候使用的是InputType.TYPE_NUMBER_FLAG_DECIMAL这个常量 但是这个常量会可以输入字母,所以它不是我们想要的。 后来我通过log的输出,找到我们需要的这个int值其实是8194,所以在代码中我们直接输入8194就可以了 //InputType.TYPE_NUMB

Kodulf的专栏 1万+

【没有网络,安装python包】如何从 PyPI 下载并安装 Plotly 的离线包

在某些情况下,您可能需要在没有互联网连接的环境中安装 Python 包,例如在飞机上、在某些受限制的网络环境中或在需要离线安装的场景下。以下是如何在 PyPI(Python Package Index)下载 Plotly 包并进行离线安装的详细步骤。

赖德发的博客 1105

保留2为小数的工具类

package com.yanshu.tools;import java.math.BigDecimal;import java.text.DecimalFormat;/** * 保留2为小数 * @author Administrator * */public class DecimalTools { public static void main(String[] args) { Strin...

ruiguang21的博客 536

小蔺的米哈游数据分析师之路——MYSQL篇

作为新人,记录自己mysql学习历程

weixin_47070228的博客 435

cuMotion 入门教程(一)面向机器人学的GPU加速运动生成技术

NVIDIA cuMotion是一款高性能机器人运动生成库,专注于机械操作任务,利用GPU加速技术提升性能。开发者预览版支持运动学/逆运动学、碰撞感知路径规划、轨迹优化等功能,兼容任意自由度机器人。该库提供C++和Python接口,支持从URDF/XRDF文件加载机器人模型,包含世界建模、碰撞检测等工具。教程详细介绍了安装配置、机器人描述加载、运动学计算、世界建模、逆运动学求解以及轨迹优化等核心功能。cuMotion整合了Lula和cuRobo库的技术优势,将成为Isaac ROS的核心组件,适用于工业机器

2506_90492529的博客 2205

Android 工具类(历史最全持续更新)

Toast唯一 /** * toast 多次点击只会出现一个 */ private static Toast toast; public static void showToast(Context context, String content) { if (toast == null) { toast

柳的博客 1172

五.EtherCAT开发之STM32F407ZGt6+ LAN9253 外置EEPROM配置数据含义

EtherCAT从站简称ESC,ESC在上电过程中,会自动加载EEPROM中前7个字(1word = 2 byte)到ESC寄存器。ESC寄存器总是可以被EtherCAT主站通过EtherCAT总线访问,无论PDI接口寄存器配置什么值。EEPROM存储器中的前7个字,将决定ESC的工作模式。

AIoT深度探索者 | 嵌入式系统架构师 深耕物联网(IoT)与人工智能(AI)融合技术,聚焦​​边缘计算、图像开发、低功耗通信协议​​,致力于智能硬件,关注我获取最新技术文章信息与海量资源~ 3472

Android中关于保留小数点位数的处理

保留两位小数 方法一: { double c = 3.154215; java.text.DecimalFormat myformat=new java.text.DecimalFormat("0.00"); String str = myformat.format(c); } 方式二: { java.text.DecimalFormat df = ne...

huang_wei_cai的专栏 1781

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Android(java)开发之将double类型,强制保留到小数点后两位解决方法。

作者:程序员小冰,优快云博客:http://blog.youkuaiyun.com/qq_21376985 前提:当我们进行double数据类型与double进行运算的时候,可能会遇到 得到小数点后好多位,但是我们只想要保存小数点后两位,如果你是这样的 需求,恭喜你,下面方案可以帮你解决。 提示:DecimalFormat df = new DecimalFormat(“#####...

技术博客 500

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

android开发之常用工具类

下面是本人在项目开发中收集总结的一些常用工具类,希望能帮助到各位,话不多说,直接上代码1、Decimal数据精确计算及小数保留工具类public class ArithDecimal { // 默认除法运算精度 private static final int DEF_DIV_SCALE = 10; // 这个类不能实例化 private ArithDecimal() {

qq_34875967的博客 506

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

android保留double小数后两位的方法

android中使用TextView或者EditText是保留double小数后两位的方法: // import java.text.DecimalFormat; // 使用格式化,四舍五入仅保留有效位 // DecimalFormat df = new DecimalFormat("#.##"); // 使用格式化,四舍五入,不足位补零 DecimalFormat df = new Decimal

道郭的博客 1万+

Android EditText控制小数点位数及输入限制工具类

项目开发中总是遇到输入框小数点限制的问题 所以就自己封装了一个工具类 而且还限制了错误输入的问题

章鱼老李的博客 779

Android BigDecimal工具类

BigDecimal工具类,目前的功能有:String字符串转double 类型,double四舍五入, BigDecimal四舍五入,double保留两位小数,BigDecimal保留两位小数,double的加、减、乘、除运算,BigDecimal 的加、减、乘、除运算。

JM_beizi的专栏 3086

关于浮点(float)类型加减乘除保留两位精度工具类。

比较简单的一个工具类,适合在Android软件开发过程中调用。 public class MyBigDecimal { public static String add(double d1, double d2) { // 进行加法运算 String st; DecimalFormat df = new DecimalFormat("0.00");

NERO-XXX的博客 815

安卓保留 一位小数 以及 千分位处理的工具类

package com.txooo.utils; import android.content.Context; import android.graphics.drawable.Drawable; import android.text.Html; import java.text.DecimalFormat; import java.text.NumberFormat; import j...

xujiajian119的博客 652
上一篇: Android activity常用传值Json字符串传字符串传对象传集合
下一篇: MyBatis查询 传入条件 模糊匹配 日期范围 id集合
SingleView
博客等级 码龄10年 2粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值