• 使用方法:

直接调用IntervalUtil.isInTheInterval(String data_value,String interval)

  • 工具类 IntervalUtil
package com.github.pig.admin.utils;import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;/*** 判断一个数是否再数学区间*/
public class IntervalUtil {/*** 判断data_value是否在interval区间范围内* @author: kangyl17909* @date: 2018年7月3日* @param data_value 数值类型的* @param interval 正常的数学区间,包括无穷大等,如:(1,3)、>5%、(-∞,6]、(125%,135%)U(70%,80%)* @return true:表示data_value在区间interval范围内,false:表示data_value不在区间interval范围内*/public static boolean isInTheInterval(String data_value,String interval) {//将区间和data_value转化为可计算的表达式String formula = getFormulaByAllInterval(data_value,interval,"||");ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript");try {//计算表达式return (Boolean) jse.eval(formula);} catch (Exception t) {return false;}}/*** 将所有阀值区间转化为公式:如* [75,80)   =》        date_value < 80 && date_value >= 75* (125%,135%)U(70%,80%)   =》        (date_value < 1.35 && date_value > 1.25) || (date_value < 0.8 && date_value > 0.7)* @param date_value* @param interval  形式如:(125%,135%)U(70%,80%)* @param connector 连接符 如:") || ("*/public static String getFormulaByAllInterval(String date_value, String interval, String connector) {StringBuffer buff = new StringBuffer();for(String limit:interval.split("U")){//如:(125%,135%)U (70%,80%)buff.append("(").append(getFormulaByInterval(date_value, limit," && ")).append(")").append(connector);}String allLimitInvel = buff.toString();int index = allLimitInvel.lastIndexOf(connector);allLimitInvel = allLimitInvel.substring(0,index);return allLimitInvel;}/*** 将整个阀值区间转化为公式:如* 145)      =》         date_value < 145* [75,80)   =》        date_value < 80 && date_value >= 75* @param date_value* @param interval  形式如:145)、[75,80)* @param connector 连接符 如:&&*/public static String getFormulaByInterval(String date_value, String interval, String connector) {StringBuffer buff = new StringBuffer();for(String halfInterval:interval.split(",")){//如:[75,80)、≥80buff.append(getFormulaByHalfInterval(halfInterval, date_value)).append(connector);}String limitInvel = buff.toString();int index = limitInvel.lastIndexOf(connector);limitInvel = limitInvel.substring(0,index);return limitInvel;}/*** 将半个阀值区间转化为公式:如* 145)      =》         date_value < 145* ≥80%      =》         date_value >= 0.8* [130      =》         date_value >= 130* <80%     =》         date_value < 0.8* @param halfInterval  形式如:145)、≥80%、[130、<80%* @param date_value* @return date_value < 145*/public static String getFormulaByHalfInterval(String halfInterval, String date_value) {halfInterval = halfInterval.trim();if(halfInterval.contains("∞")){//包含无穷大则不需要公式return "1 == 1";}StringBuffer formula = new StringBuffer();String data = "";String opera = "";if(halfInterval.matches("^([<>≤≥\\[\\(]{1}(-?\\d+.?\\d*\\%?))$")){//表示判断方向(如>)在前面 如:≥80%opera = halfInterval.substring(0,1);data = halfInterval.substring(1);}else{//[130、145)opera = halfInterval.substring(halfInterval.length()-1);data = halfInterval.substring(0,halfInterval.length()-1);}double value = dealPercent(data);formula.append(date_value).append(" ").append(opera).append(" ").append(value);String a = formula.toString();//转化特定字符return a.replace("[", ">=").replace("(", ">").replace("]", "<=").replace(")", "<").replace("≤", "<=").replace("≥", ">=");}/*** 去除百分号,转为小数* @param str 可能含百分号的数字* @return*/public static double dealPercent(String str){double d = 0.0;if(str.contains("%")){str = str.substring(0,str.length()-1);d = Double.parseDouble(str)/100;}else{d = Double.parseDouble(str);}return d;}public static void main(String[] args) {IntervalUtil a = new IntervalUtil();System.out.println(a.isInTheInterval("6.1", "(-∞,6]"));}
}

java判断一个数值是否在数学区间范围内相关推荐

  1. Java判断一个字符串中是否包含中文字符工具类

    Java判断一个字符串是否有中文一般情况是利用Unicode编码(CJK统一汉字的编码区间:0x4e00–0x9fbb)的正则来做判断,但是其实这个区间来判断中文不是非常精确,因为有些中文的标点符号比 ...

  2. Java判断一个字符串是否有中文

    Java判断一个字符串是否有中文一般情况是利用Unicode编码(CJK统一汉字的编码区间:0x4e00–0x9fbb)的正则来做判断,但是其实这个区间来判断中文不是非常精确,因为有些中文的标点符号比 ...

  3. java检查两个字符串是否包含,java判断一个字符串是否包含另外一个字符串,java另外一个,要检查一个字符串是否包含...

    java判断一个字符串是否包含另外一个字符串,java另外一个,要检查一个字符串是否包含 要检查一个字符串是否包含另外一个字符串需要使用indexOf()方法,如果indexOf方法返回大于等于0的值 ...

  4. java判断一个整数是不是素数(质数)

    java判断一个整数是不是素数(质数) /*** 判断一个数是不是素数(质数)* 质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数.*/import java.util.Scann ...

  5. [java]判断一个数字中是否含有某个数字

    [java]判断一个数字中是否含有某个数字 例如判断一个数字中是否含有2 代码: public class panduan {public static boolean test(int n) {wh ...

  6. java判断一个日期是否为工作日

    java判断一个日期是否为工作日 /*** @Author :feiyang* @Date :Created in 7:47 PM 2019/12/3*/ public class LocalDate ...

  7. Java判断一个整数有多少位

    Java判断一个整数有多少位 首先,封装一个判断位数的方法:使用for循环进行判断整数的位数.直到传进的整数小于数组中某个值时,停止循环. /*** 获取整数有多少位* @param num 要判断的 ...

  8. java判断某个数值是否在一个数值区间内

    区间判断工具类的编写 说明 重点:区间工具类(转载:前行123的博客) 使用 说明 开发中,有这么一个需求,需要根据某些属性值来进行等级判断,并把判断好的结果持久化到数据库中.而这些等级区间的格式是这 ...

  9. Java判定一个数值是否在指定的开闭区间范围内

    对于开闭区间,在数学中的表示方式通常为 () 和 [],小括号代表开放区间,中括号代表封闭区间,而它们的区别主要在于是否包含 = 等于号,开闭区间通常会分为以下一些情形: (1, 10):代表 1 & ...

最新文章

  1. 2015.4.10-SQL 高级查询(二)
  2. 简单介绍python process模块
  3. 宏定义与const的区别
  4. 深入理解C++的动态绑定和静态绑定
  5. php 支付宝小程序授权登陆验签_星巴克“啡快”登陆支付宝小程序,让你“飞快”取到咖啡...
  6. 线上电商年货节,PSD分层模板,让“年味”触手可及~
  7. shell的单引号与双引号
  8. 你晓得什么叫风华绝代
  9. 高端游戏计算机配置单,全球最顶级的游戏电脑配置 高端游戏电脑装机推荐
  10. 用C语言求解合式公式的主合取范式和主析取范式
  11. 反汇编基础:winRar去除广告
  12. 泛微OA流程自动汇总触发(流程触发集成)
  13. 初步支持三维Wavefront object模型
  14. MultipartFile 上传文件工具类
  15. 医疗系统流程软件测试用例,如何写全流程的测试用例 - rose8561900的个人空间 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  16. 集成支付平台是什么?
  17. 【PMP】项目进度考点的说明
  18. 局域网搭建共享mysql_局域网共享设置mysql安装教程.doc
  19. 论文参考文献的引用及自动编号
  20. Vista优化大师3.31正式版下载,磁盘整理升级到1.1

热门文章

  1. 只安装python能干什么_你都用 Python 来做什么?
  2. 折线图_Pyecharts数据可视化分析—折线图
  3. EDAS-机器导入失败
  4. 【差分约束】POJ3159/LG P1993 小K的农场
  5. 企业信息化管理有什么意义?
  6. 【十七】文件译文:user.properties (用户配置文件)
  7. Eclipse如何关闭在RUN/DEBUG时弹出窗口?
  8. pcl求平面法向量_PCL1.8.1 点的法向量
  9. java pfx提取私钥加签,详解pfx证书提取公私钥的方法
  10. linux nightshift调整,iOS9.3夜间模式怎么设置?iOS9.3 Night Shift设置教程