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);
}
}
分享到:
相关推荐
BigDecimal 类可以与 NumberFormat 类结合使用,用于格式化货币值、百分值等超过 16 位有效数字的数值。首先,创建 BigDecimal 对象,进行 BigDecimal 的算术运算后,分别建立对货币和百分比格式化的引用,最后利用 ...
首先,BigDecimal的构造方式主要有两种:通过字符串或通过long/int构造。例如,`new BigDecimal("123.45")`和`new BigDecimal(12345)`。构造时要注意,整数构造会默认转换为十进制,因此`new BigDecimal(12345)`实际...
JavaScript是一种广泛应用于Web开发的轻量级脚本语言,它在处理大整数或高精度浮点数时存在精度问题,这是因为JavaScript的Number类型在内存中以双精度浮点数(64位)形式存储,这限制了其精确度。为了解决这个问题...
BigDecimal工具类 BigDecimal工具类是Java中用于高精确处理常用数学运算的工具类。该工具类提供了多种精确的数学运算方法,包括加法、减法、乘法和除法等。 在BigDecimal工具类中,我们可以看到多个重载的方法,...
在Java编程语言中,BigDecimal是一...为了避免这些问题,可以通过将BigDecimal先转换为String再转换为Double的方式来保证数据的准确性。开发者应当根据具体的应用场景选择合适的转换策略,以确保程序的稳定性和准确性。
2. 创建 BigDecimal 对象:可以通过多种方式创建 BigDecimal 对象,例如将 double 或 String 类型的数值转换为 BigDecimal 对象。 3. 精确的加法运算:使用 BigDecimal 的 add 方法可以进行精确的加法运算,例如将...
因此,可以先将 BigDecimal 转换为 BigInteger,然后再转换为需要的整数类型。示例如下: ```java BigDecimal bigDecimalValue = new BigDecimal("2147483648"); BigInteger bigIntegerValue = bigDecimalValue....
本文将深入探讨 `BigDecimal` 类的基本概念、特点以及如何使用它来进行精确的算术运算。 #### 一、基本概念 `BigDecimal` 类提供了一种可以进行任意精度定点数算术的方法。这意味着它可以存储一个数值的任意小数...
这个库提供了一个名为`BigDecimal`的数据类型,用于实现大数运算,确保结果的精度不受损失。 "BigDecimal.js.zip"是一个压缩包,其中包含了"BigDecimal-all-last.min.js"文件。这个文件是BigDecimal.js库的最小化...
如果 `BigDecimal` 包含小数,但你想保留小数位并将小数部分转化为整数,可以先使用 `setScale()` 方法调整小数位,然后再调用 `intValue()`。例如: ```java BigDecimal bigDecimal = new BigDecimal(1.25); ...
本项目“MyEditTextApplication”专注于使用BigDecimal进行输入框内的价格计算,确保计算结果的高度精确,尤其是在处理小数点后的多位数字时。 BigDecimal是Java提供的一个大数类,它可以用来进行精确的浮点数运算...
在Java中,`BigDecimal` 类提供了对超过16位有效数字的十进制数进行精确算术运算的能力。它适用于金融计算、科学计算等场景,在这些场景中,使用浮点数(如 `float` 和 `double`)可能会因为精度丢失而导致错误的...
BigDecimal 类在 Java 中被设计用来处理高精度的浮点数运算,主要应用于财务、金融等领域,因为这些场景中对精度要求非常高。BigDecimal 提供了加法(add())、减法(subtract())、乘法(multiply())和除法...
这两个类位于`java.math`包下,为开发者提供了超越基本数据类型(如int、long和double)的计算能力。在深入分析`BigInteger`和`BigDecimal`的源代码之前,我们先来理解这两个类的基本概念和用途。 `BigInteger`类:...
其实有个不错的资源可以利用。 引用附件的JS,就可以轻松搞定JS的计算问题了。 使用例 <!-- function //+ alert(new BigDecimal("10").add(new BigDecimal("3E+10"))); //- alert(new BigDecimal("10")....
双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。BigDecimal所创建的是...
例如,数字`12345`在`BigDecimal`中可以表示为`1234500`,缩放因子为2,表示有两位小数。 下面是一些关于`BigDecimal`计算的关键知识点: 1. **构造方法**:`BigDecimal`可以通过字符串、整数、长整数或`...
- `setScale(2, BigDecimal.ROUND_HALF_UP)` 表示将该`BigDecimal`对象的小数点后保留2位,并采用四舍五入的方式处理第三位及以后的数字。 - 最终得到的`double f1`即为保留两位小数的结果。 #### 方法二:使用`...
5. **转换操作**:可以从字符串或其他类型转换为BigDecimal,也可以将BigDecimal转换为字符串或其他类型。 6. **幂运算**:支持大数的幂运算,包括正指数和负指数。 7. **其他数学操作**:可能包括取模、求平方根、...
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是不相等的,得采用...