package cn.edu.hbcf.common.utils;

import java.math.BigDecimal;
import java.text.NumberFormat;
import java.util.regex.Pattern; public class NumberUtils { /**
* 处理Double类型数据,如果为空返回0,否则返回其值
*
* @param d
* @return
*/
public static double getDoubleNumber(Double d) { if (d != null) {
return d.doubleValue();
} else {
return 0;
} }
/**
* 判断 String 类型的数据是否能Double转换
* @param s
* @return
*/
public static boolean isNumString(String s){
Pattern pattern = Pattern.compile("^[-+]?\\d+(\\.\\d+)?");
//Pattern pattern = Pattern.compile("(([0-9]+\\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\\.[0-9]+)|([0-9]*[1-9][0-9]*))"); return pattern.matcher(s).matches();
} /**
* 获取百分数,保留2为小数
*
* @param d
* @return
*/
public static String getPercentNumber(Double d) {
if(d==null){
d=0.0;
}
// 获取格式化对象
NumberFormat nt = NumberFormat.getPercentInstance();
// 设置百分数精确度2即保留两位小数
nt.setMinimumFractionDigits(2);
return nt.format(d);
}
/**
*
* @param d
* @param a
* @return
*/
public static double getDoubleFormat(Double d,int a){
if(d==null){
d=0.0;
}
BigDecimal bg = new BigDecimal(d);
return bg.setScale(a, BigDecimal.ROUND_HALF_UP).doubleValue();
} /**
* 保留小数
*
* @param value
* 位数
* @return
*/
public static double toFixed(double value) {
long lg = Math.round(value * 100); // 四舍五入
double d = lg / 100.0; // 注意:使用 100.0而不是 100
return d;
} public static double getFromPrecentNumber(String s) {
if (s != null && !"".equals(s)) {
double d = new Double(s.substring(0, s.indexOf('%'))) / 100.0;
return d;
} else
return 0;
}
/**
* 数值类型转化Double to Int
* @param d
* @return
*/
public static int toInt(Double d){
if(d == null){
return 0;
}else{
return (int)Math.round(d.doubleValue());
}
} public static String convertDouble(Double d){
if(d == null){
return "0";
}else{
NumberFormat nf = NumberFormat.getInstance();
nf.setGroupingUsed(false); return nf.format(d);
}
} /**
* 数字金额大写转换,思想先写个完整的然后将如零拾替换成零
* 要用到正则表达式
*/
public static String digitUppercase(double n){
String fraction[] = {"角", "分"};
String digit[] = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };
String unit[][] = {{"元", "万", "亿"},
{"", "拾", "佰", "仟"}}; String head = n < 0? "负": "";
n = Math.abs(n); String s = "";
for (int i = 0; i < fraction.length; i++) {
s += (digit[(int)(Math.floor(n * 10 * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(零.)+", "");
}
if(s.length()<1){
s = "整";
}
int integerPart = (int)Math.floor(n); for (int i = 0; i < unit[0].length && integerPart > 0; i++) {
String p ="";
for (int j = 0; j < unit[1].length && n > 0; j++) {
p = digit[integerPart%10]+unit[1][j] + p;
integerPart = integerPart/10;
}
s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i] + s;
}
return head + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$", "零元整");
} }

NumberUtils的更多相关文章

  1. NumberUtils.java

    package com.vcredit.ddcash.batch.util; import java.math.BigDecimal; public class NumberUtils { /** * ...

  2. NumberUtils、ArrayUtils和RandomUtils工具类用法

    一.NumberUtils工具类 /*1.NumberUtils.isNumber():判断字符串是否是数字*/ NumberUtils.isNumber("5.96");//结果 ...

  3. Java 数字数组随机数工具类 NumberUtils、ArrayUtils、RandomUtils用法

    commons-lang3-3-3.8.1 //----------------------------------------------------------------------- /** ...

  4. Java工具类NumberUtils使用

    int数据类型和long数据类型 int占32位,long占64位,long表示的数据更大:public static int toInt(String str) NumberUtils.toInt( ...

  5. 项目编码规范(Ali)

    一.研发流程规范 二.SQL编码规范 数据库命名规范:数据库名一律小写,必须以字母开头.库名包含多个单词的,以下划线“_”分隔.如果采用分库方案,分库编号从“0”开始,用“0”左补齐为四位. 表名规范 ...

  6. JSON金额解析BUG的解决过程

    [原创申明:文章为原创,欢迎非盈利性转载,但转载必须注明来源] 这是在我们开发的一个支付系统中暴露的一个BUG,问题本身比较简单,有意思的是解决问题的过程.将过程分享出来,希望能够对大家有所帮助. 一 ...

  7. JS 工具类

    之前工作用的JavaScript比较多,总结了一下工具类,和大家分享一下,有不足之处还请多多见谅!! 1. 数组工具类(arrayUtils) var arrayUtils = {}; (functi ...

  8. 全文检索解决方案(lucene工具类以及sphinx相关资料)

    介绍两种全文检索的技术. 1.  lucene+ 中文分词(IK) 关于lucene的原理,在这里可以得到很好的学习. http://www.blogjava.net/zhyiwww/archive/ ...

  9. 队列送券的实际应用--ConcurrentLinkedQueue并发队列

    1.TicketQueue.java--队列封装类,负责如下职责:a.把活动登记对象放入队列中b.从队列中获取活动登记对象,并派券 package com.datong.pear.ticket; im ...

随机推荐

  1. Appium获取安卓页面toast(java版)

    toast是什么?安卓页面上弹出的提示框,这种提示框出现在屏幕上大概3秒左右就会消失.用uiautomatorviewer根本定位不到. 准备环境,Appium版本需要1.6.3以上. 代码 初始化设 ...

  2. 使用JTextArea示例

    相对于JLabel显示提示文字,JTextArea有一个先天优势:文字可以拷贝出来.经过下面设置它也能在外观上和JLabel一致. 代码如下: JTextArea txtArea=new JTextA ...

  3. docker集群——K8s简介

    Kubernetes是谷歌开源的容器集群管理系统,是Google多年大规模容器管理技术Borg的开源版本,主要功能包括: 基本容器的应用部署.维护和滚动升级: 负载均衡和服务发现: 跨机器和跨地区的集 ...

  4. Office办公 如何打印顺丰发票

    1 关注顺丰速递,我-我的钱包 2 我的钱包-发票申请 3 勾选要打印发票的项目,点击申请发票 4 点击提交,确认发送的邮箱(他是把PDF发到指定邮箱)   最后PDF效果如下             ...

  5. vue - 选项

    1.计算属性(computed):主要是对原数据进行改造输出.改造输出:包括格式化数据(价格,日期),大小写转换,排序,添加符号 2.methods(methods):用于绑定html中的事件对应的方 ...

  6. Php如何返回json数据

    php返回json,xml,JSONP等格式的数据 返回json数据: header('Content-Type:application/json; charset=utf-8'); $arr = a ...

  7. React中静态类型校验 - PropTypes

    1.基本说明PropTypes定义为组件类自身的属性,用以定义prop的类型.在开发模式下,当提供一个不合法的值作为prop时,控制台会出现警告: 在产品模式下,为了性能考虑应忽略propTypes ...

  8. Android Exception 9(requestFeature() must be called before adding content)

    08-05 17:36:12.799: W/System.err(10378): java.lang.reflect.InvocationTargetException08-05 17:36:12.7 ...

  9. 强大的vim配置文件,让编程更随意(转)

    欢迎来到小码哥的博客 博客搬家啦 blog.ma6174.com 强大的vim配置文件,让编程更随意 花了很长时间整理的,感觉用起来很方便,共享一下. 我的vim配置主要有以下优点: 1.按F5可以直 ...

  10. 网站缓存技术(Redis、Memcached、Ehcache)

    Redis 是什么? 通常而言目前的数据库分类有几种,包括 SQL/NSQL,,关系数据库,键值数据库等等等. 分类的标准也不一,Redis本质上也是一种键值数据库的,但它在保持键值数据库简单快捷特点 ...