java 数字工具类_java常用工具类 数字工具类

package com.jarvis.base.util;

import java.math.BigDecimal;

import java.text.DecimalFormat;

import java.text.NumberFormat;

import java.util.Random;

public class NumericHelper {

/**

* 描述:通过一个整数i获取你所要的哪几个(从0开始) i为 多个2的n次方之和,如i=7,那么根据原值是2的n次方之各,你的原值必定是1,2,4 。

*

* @param i

* 数值

* @return

*/

public static int[] getWhich(long i) {

int exp = Math.getExponent(i);

if (i == (1 << (exp + 1)) - 1) {

exp = exp + 1;

}

int[] num = new int[exp];

int x = exp - 1;

for (int n = 0; (1 << n) < i + 1; n++) {

if ((1 << (n + 1)) > i && (1 << n) < (i + 1)) {

num[x] = n;

i -= 1 << n;

n = 0;

x--;

}

}

return num;

}

/**

* 描述:非四舍五入取整处理

*

* @param v

* 需要四舍五入的数字

* @return

*/

public static int roundDown(double v) {

BigDecimal b = new BigDecimal(Double.toString(v));

BigDecimal one = new BigDecimal("1");

return b.divide(one, 0, BigDecimal.ROUND_DOWN).intValue();

}

/**

* 描述:四舍五入取整处理

*

* @param v

* 需要四舍五入的数字

* @return

*/

public static int roundUp(double v) {

BigDecimal b = new BigDecimal(Double.toString(v));

BigDecimal one = new BigDecimal("1");

return b.divide(one, 0, BigDecimal.ROUND_UP).intValue();

}

/**

* 描述:提供精确的小数位四舍五入处理。

*

* @param v

* 需要四舍五入的数字

* @param scale

* 小数点后保留几位

* @return 四舍五入后的结果

*/

public static double round(double v, int scale) {

if (scale < 0) {

throw new IllegalArgumentException("The scale must be a positive integer or zero");

}

BigDecimal b = new BigDecimal(Double.toString(v));

BigDecimal one = new BigDecimal("1");

return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();

}

/**

* 描述:四舍五入保留两位小数

*

* @param num

* 数字

* @return 保留两位小数的数字字串

*/

public static String format(double num) {

return format(num, "0.00");

}

/**

* 描述:四舍五入数字保留小数位

*

* @param num

* 数字

* @param digits

* 小数位

* @return

*/

public static String format(double num, int digits) {

String pattern = "0";

if (digits > 0) {

pattern += "." + createStr("0", digits, "");

}

return format(num, pattern);

}

/**

* 描述:生成字符串

*

* @param arg0

* 字符串元素

* @param arg1

* 生成个数

* @param arg2

* 间隔符号

* @return

*/

private static String createStr(String arg0, int arg1, String arg2) {

if (arg0 == null) {

return "";

} else {

StringBuffer sb = new StringBuffer();

for (int i = 0; i < arg1; i++) {

if (arg2 == null)

arg2 = "";

sb.append(arg0).append(arg2);

}

if (sb.length() > 0) {

sb.delete(sb.lastIndexOf(arg2), sb.length());

}

return sb.toString();

}

}

/**

* 描述:数字格式化

*

* @param num

* 数字

* @param pattern

* 格式

* @return

*/

public static String format(double num, String pattern) {

NumberFormat fmt = null;

if (pattern != null && pattern.length() > 0) {

fmt = new DecimalFormat(pattern);

} else {

fmt = new DecimalFormat();

}

return fmt.format(num);

}

/**

* 求浮点数的权重

*

* @param number

* @return

*/

public static double weight(double number) {

if (number == 0) {

return 1;

}

double e = Math.log10(Math.abs(number));

int n = Double.valueOf(Math.floor(e)).intValue();

double weight = 1;

if (n > 0) {

for (int i = 0; i < n; i++) {

weight *= 10;

}

} else {

for (int i = 0; i > n; i--) {

weight /= 10;

}

}

return weight;

}

/**

* 获得权重的单位

*

* @param scale

* @return

*/

public static String unit(double scale) {

if (scale == 1 || scale == 0) {

return "";// 不设置单位倍率单位,使用基准单位

}

String[] units = new String[] { "十", "百", "千", "万", "十万", "百万", "千万", "亿", "十亿", "百亿", "千亿", "兆" };

String[] units2 = new String[] { "十分", "百分", "千分", "万分", "十万分", "百万分", "千万分" };

double e = Math.log10(scale);

int position = Double.valueOf(Math.ceil(e)).intValue();

if (position >= 1 && position <= units.length) {

return units[position - 1];

} else if (position <= -1 && -position <= units2.length) {

return units2[-position - 1];

} else {

return "无量";

}

}

/**

* 获得浮点数的缩放比例

*

* @param num

* @return

*/

public static double scale(double num) {

double absValue = Math.abs(num);

// 无需缩放

if (absValue < 10000 && absValue >= 1) {

return 1;

}

// 无需缩放

else if (absValue < 1 && absValue > 0.0001) {

return 1;

} else {

return weight(num) / 10;

}

}

/**

* 获得缩放后并且格式化的浮点数

*

* @param num

* @param scale

* @return

*/

public static double scaleNumber(double num, double scale) {

DecimalFormat df = null;

if (scale == 1) {

df = new DecimalFormat("#.0000");

} else {

df = new DecimalFormat("#.00");

}

double scaledNum = num / scale;

return Double.valueOf(df.format(scaledNum));

}

/**

* 产生n位随机数 TODO:性能不要,有待优化

*/

public static String ramdomNumber(int n) {

if (n <= 0) {

throw new IllegalArgumentException("n must be positive !");

}

Random random = new Random();

StringBuilder result = new StringBuilder();

for (int i = 0; i < n; i++) {

result.append(random.nextInt(10));

}

return result.toString();

}

/**

* 缩放1W倍

*/

public static double changeTo(double number) {

boolean flag = false;

if (number < 0) {

flag = true;

}

double value = Math.abs(number);

value = value / 10000.0;

if (flag) {

value = Double.parseDouble("-" + value);

}

return value;

}

/**

*

* 描述:缩放比例

*

* @param number

* @param scale

* @param points

* @return

*/

public static String scaleNumberToStr(double number, double scale, int points) {

boolean flag = (number < 0);

number = Math.abs(number);

String result = "";

DecimalFormat nbf3 = (DecimalFormat) NumberFormat.getInstance();// 默认格式

nbf3.setGroupingUsed(false);

nbf3.setMinimumFractionDigits(points);

nbf3.setMaximumFractionDigits(points);

double scaledNum = number / scale;

result = nbf3.format(scaledNum);

if (flag) {

result = "-" + result;

}

return result;

}

}

/** * @project: WebProjectUtil * @class: NumberUtil * @describe: 此工具类用来处理数字方面的逻辑, * 如返回指定位数的随机数字、Double的加减乘除精确运算、指定位数数字用“0”补齐 * @autho: Administrator * @date: 2013-6-7 下午02:26:27 * @alter: Administrator * @alterDate: 2013-6-7 下午02:26:27 * @alterRemark: * @version V1.0 */ public class NumberUtil { private static final int DEF_DIV_SCALE = 2; /** * @return 返回12位随机数 */ public static String randomNumber() { } /** * @param parm * @return 返回指定位数随机数 */ public static String randomNumber(int parm) { } /** * * 两个Double数相加 * * @param v1 * @param v2 * @return Double */ public static Double add(Double v1, Double v2) { } /** * * 两个Double数相减 * * @param v1 * @param v2 * @return Double */ public static Double sub(Double v1, Double v2) { } /** * * 两个Double数相乘 * * @param v1 * @param v2 * @return Double */ public static Double mul(Double v1, Double v2) { } /** * * 两个Double数相除 * * @param v1 * @param v2 * @return Double */ public static Double div(Double v1, Double v2) { } /** * * 两个Double数相除,并保留scale位小数 * * @param v1 * @param v2 * @param scale * @return Double */ public static Double div(Double v1, Double v2, int scale) { } /** * 返回指定Double的负数 * @param v1 * @return */ public static Double neg(Double v1) { /** * @Title: toFixdLengthString * @Description: 将字符串用符号填充位数 * @param str 源字符串 * @param fixdlenth 位数 * @return String * @throws */ public static String toFixdLengthString(String str, int fixdlenth) { } /** * @Title: toFixdLengthString * @Description: 将数字用“0”填充位数 * @param num * @param fixdlenth * @return String * @throws */ public static String toFixdLengthString(int num, int fixdlenth) { } /** * @Title: generateSpaceString * @Description: 得到指定位数占位符 * @param length * @return String * @throws */ public static String generateSpaceString(int length) { } /** * @Title: generateZeroString * @Description: 得到指定位数的“0”的占位符 * @param length * @return String * @throws */ public static String generateZeroString(int length) { } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值