bigdecimal转化为string出现0E-10
时间: 2024-09-19 13:07:08 浏览: 202
当你使用`BigDecimal`转换为字符串时,遇到`0E-10`这样的表示,这是因为`BigDecimal`在进行精度较低的小数表示时,会采用科学计数法来节省空间,并显示成这种形式。这里的`0E-10`意味着零乘以十的负十次方,即小数点后的第十位是零。
例如,如果你有一个非常接近于零但有小数部分的`BigDecimal`值,如`BigDecimal.ZERO.add(BigDecimal.ONE.divide(TEN.pow(-10)))`,它会被转换为`0.0000000001`,但在字符串中就会显示为`0E-10`。
如果你想直接得到没有指数形式的字符串,可以使用`toPlainString()`方法,或者设置`MathContext`来指定精确的舍入规则:
```java
BigDecimal bd = new BigDecimal("0.0000000001");
String str = bd.toPlainString(); // 输出 "0"
```
或者
```java
MathContext mc = new MathContext(5); // 设置保留5位小数
String str = bd.stripTrailingZeros().round(mc).toString(); // 输出 "0.00001"
```
相关问题
转java 用bigdecimal实现 IFERROR((AD3/AH3-1)/9*0.1+(AE3/AH3-1)/9*0.2+(AF3/AH3-1)/9*0.2+(AG3/AH3-1)/9*0.5,"-")
这是一个 Excel 公式,使用 Java 中的 BigDecimal 类可以实现同样的计算。以下是将该公式转换为 Java 代码的示例:
```
import java.math.BigDecimal;
public class Main {
public static void main(String[] args) {
BigDecimal ad3 = new BigDecimal("10"); // 替换为实际的值
BigDecimal ae3 = new BigDecimal("20"); // 替换为实际的值
BigDecimal af3 = new BigDecimal("30"); // 替换为实际的值
BigDecimal ag3 = new BigDecimal("40"); // 替换为实际的值
BigDecimal ah3 = new BigDecimal("100"); // 替换为实际的值
BigDecimal result = BigDecimal.ZERO;
BigDecimal divisor = new BigDecimal("9");
BigDecimal factor1 = new BigDecimal("0.1");
BigDecimal factor2 = new BigDecimal("0.2");
BigDecimal factor3 = new BigDecimal("0.2");
BigDecimal factor4 = new BigDecimal("0.5");
try {
BigDecimal quotient1 = ad3.divide(ah3, 10, BigDecimal.ROUND_HALF_UP).subtract(BigDecimal.ONE);
BigDecimal quotient2 = ae3.divide(ah3, 10, BigDecimal.ROUND_HALF_UP).subtract(BigDecimal.ONE);
BigDecimal quotient3 = af3.divide(ah3, 10, BigDecimal.ROUND_HALF_UP).subtract(BigDecimal.ONE);
BigDecimal quotient4 = ag3.divide(ah3, 10, BigDecimal.ROUND_HALF_UP).subtract(BigDecimal.ONE);
BigDecimal product1 = quotient1.divide(divisor, 10, BigDecimal.ROUND_HALF_UP).multiply(factor1);
BigDecimal product2 = quotient2.divide(divisor, 10, BigDecimal.ROUND_HALF_UP).multiply(factor2);
BigDecimal product3 = quotient3.divide(divisor, 10, BigDecimal.ROUND_HALF_UP).multiply(factor3);
BigDecimal product4 = quotient4.divide(divisor, 10, BigDecimal.ROUND_HALF_UP).multiply(factor4);
result = product1.add(product2).add(product3).add(product4);
} catch (ArithmeticException e) {
result = new BigDecimal("-");
}
System.out.println(result);
}
}
```
在该示例中,我们使用了 BigDecimal 的 `divide()` 方法来计算除法,并使用了 `subtract()` 方法计算分子减一。由于除法可能出现除不尽的情况,我们使用 `try-catch` 块来捕获 `ArithmeticException` 异常,并在出现异常时将结果设为 "-"。最后,我们使用 `add()` 方法将四个乘积相加,得到最终的结果。
使用java bigdecimal 实现 =IFERROR((C8/G8-1)/9*0.1+(D8/G8-1)/9*0.2+(E8/G8-1)/9*0.2+(F8/G8-1)/9*0.5,"")
可以使用Java的BigDecimal类来实现这个公式。首先需要将所有的数值转换为BigDecimal类型,并使用try-catch语句捕获除数为0的异常。
代码示例:
```
import java.math.BigDecimal;
public class Calculation {
public static void main(String[] args) {
// 定义变量
BigDecimal c8 = new BigDecimal("10");
BigDecimal d8 = new BigDecimal("20");
BigDecimal e8 = new BigDecimal("30");
BigDecimal f8 = new BigDecimal("40");
BigDecimal g8 = new BigDecimal("5");
try {
// 计算公式
BigDecimal result = BigDecimal.ZERO;
BigDecimal oneNinth = new BigDecimal("0.1111111111"); // 1/9
BigDecimal tenPercent = new BigDecimal("0.1");
BigDecimal twentyPercent = new BigDecimal("0.2");
BigDecimal fiftyPercent = new BigDecimal("0.5");
if (g8.compareTo(BigDecimal.ZERO) != 0) {
BigDecimal part1 = c8.divide(g8, 10, BigDecimal.ROUND_HALF_UP).subtract(BigDecimal.ONE);
BigDecimal part2 = d8.divide(g8, 10, BigDecimal.ROUND_HALF_UP).subtract(BigDecimal.ONE);
BigDecimal part3 = e8.divide(g8, 10, BigDecimal.ROUND_HALF_UP).subtract(BigDecimal.ONE);
BigDecimal part4 = f8.divide(g8, 10, BigDecimal.ROUND_HALF_UP).subtract(BigDecimal.ONE);
result = part1.multiply(tenPercent).add(part2.multiply(twentyPercent)).add(part3.multiply(twentyPercent)).add(part4.multiply(fiftyPercent));
result = result.multiply(oneNinth);
}
System.out.println(result.toString());
} catch (ArithmeticException e) {
System.out.println("");
}
}
}
```
上述代码中,我们使用了BigDecimal的divide方法来进行除法运算,并设置了小数点后保留10位,并且使用ROUND_HALF_UP进行四舍五入。如果除数为0,将会抛出ArithmeticException异常,我们在catch语句中输出空字符串。
阅读全文
相关推荐
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![-](https://img-home.csdnimg.cn/images/20241226111658.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)