`
nannan408
  • 浏览: 1784194 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

扩展63位long型数字为64位正BigDecimal (利用补码,可以将63位变为64位))

 
阅读更多
1. 前言。
  如题。
2.代码
  
/**
	 * 将long转为64位的BigDecimal
	 * 
	 * @param a
	 * @return
	 */
	public static BigDecimal longBigDecimal(long a) {
		System.out.println("解密前号码" + a);
		System.out.println("解密前二进制" + BigInteger.valueOf(a).toString(2));
		if (a > 0) {
			return BigDecimal.valueOf(a);
		} else {
			// 溢出,负数肯定溢出,因为是自定义的
			// 先转为byte01,
			// 1000000000000000000000000000000000000000000000000100100100001011//真正的数
			// -111111111111111111111111111111111111111111111111011011011110101//原始数
			// -000000000000000000000000000000000000000000000000100100100001010
			// -9223372036854757109l

			// 
			StringBuffer aString = new StringBuffer("1").append(BigInteger
					.valueOf(a).toString(2).replace("-", ""));
			boolean ifJinwei = false;
			// 补码运算。全部取反,再加1
			for (int i = aString.length() - 1; i >= 1; i--) {
				char b = aString.toString().charAt(i);
				if (i == aString.length() - 1) {
					// 如果为0 ,48,那么必须进位
					if (b == 48) {
						// 0取反是1,1加1进位为0
						b = 48;
						ifJinwei = true;
					} else {
						// 1取反后是0,0+1是1
						b = 49;
						ifJinwei = false;
					}
				} else {
					// 如果不是,那么
					if (b == 48) {
						// 取反为1,如果有进位则1和1为零,
						if (ifJinwei) {
							b = 48;
							ifJinwei = true;
						} else {
							// 进位取反为1
							b = 49;
							ifJinwei = false;
						}
					} else if (b == 49) {
						// 如果为1取反为0,有进位,则为1
						if (ifJinwei) {
							// 有进位,0+1为1,不再进位
							b = 49;
							ifJinwei = false;
						} else {
							// 如果为1取反为0
							b = 48;
							ifJinwei = false;
						}
					}
				}
				aString.replace(i, i + 1, String.valueOf(b));
			}
			String resultaString = aString.toString();
			System.out.println("解密后:" + resultaString);
			String result = new BigInteger(resultaString, 2).toString(10);
			System.out.println("解密转换后:" + result);
			return new BigDecimal(result);

		}
	}


0
0
分享到:
评论

相关推荐

    BigDecimal类

    BigDecimal 类可以与 NumberFormat 类结合使用,用于格式化货币值、百分值等超过 16 位有效数字的数值。首先,创建 BigDecimal 对象,进行 BigDecimal 的算术运算后,分别建立对货币和百分比格式化的引用,最后利用 ...

    java BigDecimal操作

    首先,BigDecimal的构造方式主要有两种:通过字符串或通过long/int构造。例如,`new BigDecimal("123.45")`和`new BigDecimal(12345)`。构造时要注意,整数构造会默认转换为十进制,因此`new BigDecimal(12345)`实际...

    javascript版BigDecimal类库

    JavaScript是一种广泛应用于Web开发的轻量级脚本语言,它在处理大整数或高精度浮点数时存在精度问题,这是因为JavaScript的Number类型在内存中以双精度浮点数(64位)形式存储,这限制了其精确度。为了解决这个问题...

    BigDecimal工具类.docx

    BigDecimal工具类 BigDecimal工具类是Java中用于高精确处理常用数学运算的工具类。该工具类提供了多种精确的数学运算方法,包括加法、减法、乘法和除法等。 在BigDecimal工具类中,我们可以看到多个重载的方法,...

    BigDecimal向Double转换

    在Java编程语言中,BigDecimal是一...为了避免这些问题,可以通过将BigDecimal先转换为String再转换为Double的方式来保证数据的准确性。开发者应当根据具体的应用场景选择合适的转换策略,以确保程序的稳定性和准确性。

    BigDecimal使用

    2. 创建 BigDecimal 对象:可以通过多种方式创建 BigDecimal 对象,例如将 double 或 String 类型的数值转换为 BigDecimal 对象。 3. 精确的加法运算:使用 BigDecimal 的 add 方法可以进行精确的加法运算,例如将...

    将 BigDecimal 类型转换为 Integer 类型.pdf

    因此,可以先将 BigDecimal 转换为 BigInteger,然后再转换为需要的整数类型。示例如下: ```java BigDecimal bigDecimalValue = new BigDecimal("2147483648"); BigInteger bigIntegerValue = bigDecimalValue....

    bigdecimal

    本文将深入探讨 `BigDecimal` 类的基本概念、特点以及如何使用它来进行精确的算术运算。 #### 一、基本概念 `BigDecimal` 类提供了一种可以进行任意精度定点数算术的方法。这意味着它可以存储一个数值的任意小数...

    BigDecimal.js.zip

    这个库提供了一个名为`BigDecimal`的数据类型,用于实现大数运算,确保结果的精度不受损失。 "BigDecimal.js.zip"是一个压缩包,其中包含了"BigDecimal-all-last.min.js"文件。这个文件是BigDecimal.js库的最小化...

    bigdecimal转integer.docx

    如果 `BigDecimal` 包含小数,但你想保留小数位并将小数部分转化为整数,可以先使用 `setScale()` 方法调整小数位,然后再调用 `intValue()`。例如: ```java BigDecimal bigDecimal = new BigDecimal(1.25); ...

    MyEditTextApplication输入框BigDecimal计算价格

    本项目“MyEditTextApplication”专注于使用BigDecimal进行输入框内的价格计算,确保计算结果的高度精确,尤其是在处理小数点后的多位数字时。 BigDecimal是Java提供的一个大数类,它可以用来进行精确的浮点数运算...

    BigDecimal的计算

    在Java中,`BigDecimal` 类提供了对超过16位有效数字的十进制数进行精确算术运算的能力。它适用于金融计算、科学计算等场景,在这些场景中,使用浮点数(如 `float` 和 `double`)可能会因为精度丢失而导致错误的...

    BigDecimal加减乘除计算

    BigDecimal 类在 Java 中被设计用来处理高精度的浮点数运算,主要应用于财务、金融等领域,因为这些场景中对精度要求非常高。BigDecimal 提供了加法(add())、减法(subtract())、乘法(multiply())和除法...

    java-BigInteger-BigDecimal类源码

    这两个类位于`java.math`包下,为开发者提供了超越基本数据类型(如int、long和double)的计算能力。在深入分析`BigInteger`和`BigDecimal`的源代码之前,我们先来理解这两个类的基本概念和用途。 `BigInteger`类:...

    JS的高精度计算(BigDecimal)

    其实有个不错的资源可以利用。 引用附件的JS,就可以轻松搞定JS的计算问题了。 使用例 <!-- function //+ alert(new BigDecimal("10").add(new BigDecimal("3E+10"))); //- alert(new BigDecimal("10")....

    BigDecimal 加减乘除运算

    双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是...

    BigDecimal计算

    例如,数字`12345`在`BigDecimal`中可以表示为`1234500`,缩放因子为2,表示有两位小数。 下面是一些关于`BigDecimal`计算的关键知识点: 1. **构造方法**:`BigDecimal`可以通过字符串、整数、长整数或`...

    Java保留两位小数方法大全

    - `setScale(2, BigDecimal.ROUND_HALF_UP)` 表示将该`BigDecimal`对象的小数点后保留2位,并采用四舍五入的方式处理第三位及以后的数字。 - 最终得到的`double f1`即为保留两位小数的结果。 #### 方法二:使用`...

    js_bigdecimal_1_0_1.zip

    5. **转换操作**:可以从字符串或其他类型转换为BigDecimal,也可以将BigDecimal转换为字符串或其他类型。 6. **幂运算**:支持大数的幂运算,包括正指数和负指数。 7. **其他数学操作**:可能包括取模、求平方根、...

    关于BigDecimal的构造函数与大小比较

    BigDecimal b1=new BigDecimal("1.0"); BigDecimal b2=new BigDecimal("1.00"); boolean t=b1.equals(b2); 怎么样,你认为t是true还是false?它还真是false。BigDecimal的大小比较,1.0与1.00是不相等的,得采用...

Global site tag (gtag.js) - Google Analytics