【问题标题】:String to BigNumber conversion, a particular solutionString到BigNumber的转换,具体解决方法
【发布时间】:2012-05-16 15:27:54
【问题描述】:

我正在编写一个 Java 程序来处理一些伪 xml 格式的电子税表。
要支付或退还的税款采用以下格式: 13 字符长的无符号整数字符串,其中最后两位代表美分,即两位小数。结果是肯定的(付款)还是否定的(退款)在其他地方指示,因此这里不相关。

我需要将此字符串转换为 BigNumber 并得出以下解决方案,这是一个好方法吗?你知道更好的解决方案吗?

public class BigDecimalTest {
    public static void main(String[] args) {

        // 0000000043272  for EUR 432.72
        String s = "0000000043272";    

        //mantissa is the amount as-is, exponent-2 since working with 2 decimal places.
        BigDecimal bd = new BigDecimal(s+"E-2"); 

        System.out.printf("%s: BigDecimal %sE-2 toString: %s\n", s, s, bd.toString());
    }
}

【问题讨论】:

  • 您可以将数字除以 100; BigDecimal bd = new BigDecimal(s).divide(new BigDecimal(100));。如果您这样做,请将 100 存储为常量,以避免每次都创建一个新的 bigdecimal。
  • 或者使用 BigDecimal.valueOf(100) 让它为你做缓存。

标签: java type-conversion bigdecimal bignum


【解决方案1】:

你也可以使用:

BigDecimal bd = new BigDecimal("1234").movePointLeft(2);

创建第二个实例,但更具可读性。

【讨论】:

  • 好一个!不确定是否更有效,因为它创建了两个 BigDecimal,但它绝对更简洁明了。我相信我的解决方案只创建了一个实例,但可能还没有实际意义。
  • @b4nd0ler0 比什么更有效率?除以 100 也会创建两个实例。
  • OP 没有除以 100。他正在将指数修饰符附加到字符串,并从中进行初始化。仔细想想,他确实在该过程中创建了一个额外的 String 实例,因此从对象创建的角度来看,它并没有效率。
【解决方案2】:

另一种选择:

// making use of the constructor scale parameter
BigDecimal bd = new BigDecimal(new BigInteger(s), 2);  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    相关资源
    最近更新 更多