如何配置BigDecimal值,以使其如果少于32个字符,则应将其显示为纯字符串,否则应以工程格式显示?

例如:


  3690215840369.69874120035964120-纯字符串
  369043523215840369.69874120035964120-表示形式的工程格式


我尝试通过以下方式解决此问题:

    BigDecimal bd = new BigDecimal("8678679532108467840356746356832624562456786656736.6456442652456345673656");
    System.out.println(bd.toEngineeringString());
    System.out.println(bd.toPlainString());


但是输出是相同的。那么,如何获得BigDecimal实例的工程表示形式?

最佳答案

你不能做这样的事情:

BigDecimal bd = new BigDecimal("8678679532108467840356746356832624562456786656736.6456442652456345673656");
System.out.println(bd.toPlainString().length()<32 ? bd.toPlainString() : bd.toEngineeringString());


并且如果需要在检查32时忽略小数点:

BigDecimal bd = new BigDecimal("8678679532108467840356746356832624562456786656736.6456442652456345673656");
int decimalOffset = 0;
if (bd.toPlainString().indexOf('.')>=0)
        decimalOffset=1;
System.out.println(bd.toPlainString().length()-decimalOffset<32 ? bd.toPlainString() : bd.toEngineeringString());


但是,如果您的意思是科学计数法,那么请查看史蒂夫的答案here,并将其替换为我的答案的第一部分,方法是将bd.toEngineeringString()替换为format(bd)

10-02 21:15