java - 如何截断/舍入大 BigDecimal 数字以采用科学记数法

标签 java bigdecimal

我正在用 Java 制作一个计算器,最多只能显示 17 个字符,因此 . 被视为一个字符,E15 被视为 3 个字符。

我在这个网站上进行了广泛的研究,但找不到这样的问题......(抱歉,如果有重复)

如何强制将像 9999998990000001 这样的大 BigDecimal 转换为像 9.999998990000E15 这样的东西。

我不希望它始终采用科学记数法,因此长度小于 16 个字符的数字不应采用科学记数法。

如果您无法理解的话,它本质上就像一个手持计算器。

最佳答案

您可以简单地检查数字是否小于 16 个字符,如果不这样做:

private static String formatNumber(BigDecimal bDecimal, int scaleInt) {
  NumberFormat nFromatter = new DecimalFormat("0.0E0");
  nFromatter.setRoundingMode(RoundingMode.HALF_UP);
  nFromatter.setMinimumFractionDigits(scaleInt);
  return formatter.format(bDecimal);
}

System.out.println(formatNumber(new BigDecimal("0.00001"), 2)); 
// Output will be 1.00E-5
System.out.println(formatNumber(new BigDecimal("0.00001"), 3)); 
// Output will be 1.000E-5

关于java - 如何截断/舍入大 BigDecimal 数字以采用科学记数法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47988140/

相关文章:

java - 如何从 Action 监听器/类构造函数访问变量以在 java 的 main 方法中使用

java - 检查 Intent 数据是否为空?

java - JDBC 错误 : Before start of result set

java - DecimalFormat 被服务器设置覆盖

java - Java中的序列点概念

java - JUnit4:无法在 JAR 外部运行 lib 目录的测试用例

java - 具有智能精度(比例)的 BigDecimal

ruby-on-rails - rails : Converting currency from form to big decimal

java - 使用比例获取 bigdecimal 值

java - 使用 HALF_UP 舍入模式舍入时 BigDecimal 的惊人行为