数字格式化(输入数字(字符串),保留位数,同时逗号分隔,可输入科学计数法,增加了负数的处理)
来源:互联网 发布:sql中rand 编辑:程序博客网 时间:2024/05/29 10:36
package com.nec.fastunit.common;
import java.math.BigDecimal;
public class FormatNumber {
public static String formatNumber(String number,int weishu){
// 判断字符串是否为空
if(number == null || (number.trim().length() == 0)){
// System.out.println("输入的数字为空,请输入数字");
return "";
}
// 判断字符串里有除点号之外的非数字存在
char[] strArray = number.toCharArray();
for(int i = 0; i < strArray.length; i++){
if((strArray[i] < '0' || strArray[i] > '9')&& (strArray[i] != '.' && strArray[i] != '-' && strArray[i] != 'E')){
// System.out.println("您输入的字符串中含有非法字符,请重新输入");
return number;
}else if(strArray[i] == 'E'){
if(strArray[0] == '-'){
number = number.substring(1,number.length());
String numstr = orinum(number);
numstr = "-" + numstr;
number = numstr;
}else{
number = orinum(number);
}
}
}
// 四舍五入后得数
number = String.valueOf(numz(Double.valueOf(number),weishu));
// 判断小数位数为0的情况
if(number.indexOf(".") != -1 && weishu == 0){
int pointNumber = number.indexOf(".");
String strFirst = number.substring(0,pointNumber);
// 小数点前字符串分割
strFirst = splitFirstNumber(strFirst);
return strFirst;
}
// 判断没有小数点,但小数位数要求有位数的情况
if(number.indexOf(".") == -1 && weishu != 0){
number = number + ".";
for(int i = 0; i < weishu; i++){
number = number + "0";
}
int pointNumber = number.indexOf(".");
String strFirst = number.substring(0,pointNumber);
String strLast = number.substring(pointNumber + 1,number.length());
// 小数点前字符串分割
strFirst = splitFirstNumber(strFirst);
// 小数点后字符串分割
strLast = splitLastNumber(strLast);
return strFirst + "." + strLast;
}
// 判断没有小数部分的情况
if((number.indexOf(".") == -1) && weishu == 0){
// 小数点前字符串分割
number = splitFirstNumber(number);
return number;
} else {
int pointNumber = number.indexOf(".");
String strFirst = number.substring(0,pointNumber);
String strLast = number.substring(pointNumber + 1,number.length());
// 小数位数判断
strLast = formatPoint(strLast,weishu);
// 小数点前字符串分割
strFirst = splitFirstNumber(strFirst);
// 小数点后字符串分割
strLast = splitLastNumber(strLast);
return strFirst + "." + strLast;
}
}
/**
*
* @param str 小数点前的字符串
* @return 返回小数点前的逗号分割
*/
public static String splitFirstNumber(String str){
char[] strArray = str.toCharArray();
if(strArray[0] == '-'){
StringBuffer strBuffer = new StringBuffer();
strBuffer.append(str);
strBuffer.reverse();
str = strBuffer.toString();
StringBuffer sb = new StringBuffer();
for(int i = 0; i < str.length(); i=i+3){
if(i+3 < str.length()){
String str1 = str.substring(i,i+3);
sb.append(str1);
if(i+3 == str.length() -1){
//
}else{
sb.append(",");
}
} else {
String str2 = str.substring(i,str.length());
sb.append(str2);
}
}
sb.reverse();
return sb.toString();
}else{
StringBuffer strBuffer = new StringBuffer();
strBuffer.append(str);
strBuffer.reverse();
str = strBuffer.toString();
StringBuffer sb = new StringBuffer();
for(int i = 0; i < str.length(); i=i+3){
if(i+3 < str.length()){
String str1 = str.substring(i,i+3);
sb.append(str1);
sb.append(",");
} else {
String str2 = str.substring(i,str.length());
sb.append(str2);
}
}
sb.reverse();
return sb.toString();
}
}
/**
*
* @param str 小数点后字符串
* @return 逗号分割后的字符串
*/
public static String splitLastNumber(String str){
StringBuffer sb = new StringBuffer();
for(int i = 0; i < str.length(); i=i+3){
if(i+3 < str.length()){
String str1 = str.substring(i,i+3);
sb.append(str1);
sb.append(",");
} else {
String str2 = str.substring(i,str.length());
sb.append(str2);
}
}
return sb.toString();
}
/**
*
* @param laststr 小数点后字符串
* @param bitWei 截取的字符串长度
* @return 返回小数点后应得的字符串
*/
public static String formatPoint(String laststr,int bitWei){
int n = laststr.length();
if(n < bitWei){
for(int i = 0; i < bitWei - n; i++){
laststr = laststr + "0";
}
} else {
BigDecimal bd = new BigDecimal("0." + laststr).setScale(bitWei,BigDecimal.ROUND_HALF_UP);
laststr = bd.toString();
laststr = laststr.substring(2,laststr.length());
}
return laststr;
}
// 处理科学计数法
public static String orinum(String str){
int index = str.indexOf("E");
String lstr = str.substring(index + 1, str.length());
int pindex = str.indexOf(".");
// System.out.println("pindex: " + pindex);
// 取小数点后到E之间的字符串
String midstr = str.substring(pindex + 1,index);
// 取小数点前字符
String pstr = str.substring(0,pindex);
// 判断E后数字是正还是负
Integer e = Integer.parseInt(lstr);
String nstr = null;
if(e > 0){
if(midstr.length() > e){
nstr = pstr + midstr.substring(0,e) + "." + midstr.subSequence(e, midstr.length());
}else{
nstr = pstr + midstr;
for(int i = 0; i < e - midstr.length(); i++){
nstr = nstr + "0";
}
}
}else{
if(pstr.length() > -e){
nstr = pstr.substring(0,pindex + e) + "." + pstr.substring(pindex+e,pstr.length()) + midstr;
}else{
nstr = pstr + midstr;
for(int i = 0; i < -e - pstr.length(); i++){
nstr = "0" + nstr;
}
nstr = "0." + nstr;
}
}
return nstr;
}
public static double numz(double numstr,int bitshu){
BigDecimal b = new BigDecimal(Double.toString(numstr));
String finalnum = b.setScale(bitshu, BigDecimal.ROUND_HALF_EVEN).toString();
return Double.valueOf(finalnum);
}
}
- 数字格式化(输入数字(字符串),保留位数,同时逗号分隔,可输入科学计数法,增加了负数的处理)
- BigDecimal的用法详解(保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字里的逗号处理)
- BigDecimal的用法详解(保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字里的逗号处理)
- BigDecimal的用法详解(保留两位小数,四舍五入,数字格式化,科学计数法转数字,数字里的逗号处理)
- android显示数字时,String 字符串的操作【三位一逗号、去除科学计数法】
- 关于数字的格式化显示[比如保留几位小数/三位一逗号分隔等等]
- EXCEL中输入的数字无法正常显示变成科学计数法
- PHP数字格式化,每三位逗号分隔数字,可以保留小数
- 一行代码实现EditText数字输入逗号和位数限制
- 科学计数法的输入
- C++把输入的一连串逗号分隔的数字存到数组
- 数字输入处理 , 保留两位小数
- java接受输入数字的数字格式化
- js格式化金额.数字. 逗号分隔 ,##.00
- js格式化数字 金额按千位逗号分隔
- input输入框验证数字,可小数,负数
- C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现。
- C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现
- 关于Traceview的使用
- jsf
- ASP.NET MVC 入门 -- 2、项目的目录结构与核心的DLL
- Oracle用imp和exp实现数据的导入和导出
- 三次样条插值 SPLINE
- 数字格式化(输入数字(字符串),保留位数,同时逗号分隔,可输入科学计数法,增加了负数的处理)
- CFileFind类
- 人生的意义
- Hibernate笔记
- VC6下开发的应用程序调试VS2008开发的DLL
- 开始进行samba移植工作罗。
- 五大软件系统
- 软件开发中的版本控制问题
- Flex与Webservice之间的交互