十进制长分隔符(java/spring)

qojgxg4l  于 2021-06-27  发布在  Java
关注(0)|答案(3)|浏览(375)

我需要把小数点分隔在一个长的,我已经尝试了几种方法,但我需要它是动态的,因为小数点分隔符可以改变,我已经尝试了 DecimalFormat format = new DecimalFormat("###.##"); 但这不是动态的,也不是我想要的那样
例1
long amount = 123456; int decimal = 2; 结果应该是 Double newAmount = 1234.56 例2
long amount = 123456; int decimal = 4; 结果应该是 Double newAmount = 12.3456

noj0wjuj

noj0wjuj1#

如果我理解正确,这就是你想要达到的目标:

Long amount = 123456;
int decimal = 2;
double newAmount = amount.doubleValue();
newAmount = newAmount / Math.pow(10, decimal);

使用java.lang.math的pow方法计算数字的幂。
如果要使用变量的函数之一,请注意将变量声明为long类型的对象,而不是基元类型。
正如所建议的,只使用双变量而不是从一开始就使用长变量更简单:

double amount = 123456;
int decimal = 2;
amount = amount / Math.pow(10, decimal);
zujrkrfu

zujrkrfu2#

你可以用给定的数字除以10^decimalplaces得到所需的数字。

public class Main {
    public static void main(String[] args) {
        // Test
        System.out.println(getNum(123456, 2));
        System.out.println(getNum(123456, 4));
    }

    static double getNum(long val, int decimalPlaces) {
        return val / Math.pow(10, decimalPlaces);
    }
}

输出:

1234.56
12.3456
amrnrhlw

amrnrhlw3#

所有其他的答案都建议改为 double 然后在显示前按10的倍数缩放。这将由于缩放操作中的精度损失而导致一些意外的结果。对于完整的,血淋淋的细节为什么,请阅读什么每一个计算机科学家应该知道浮点运算和浮点是打破?
至于你的问题,你应该用 BigDecimal . 转换自 long (或 Long )至 BigDecimal 不会失去精度,并将始终产生预期的结果。
bigdecimal甚至有一种方法可以为您进行缩放:

long amount = 123456;
int decimal = 2;
BigDecimal n = BigDecimal.valueOf(amount).scaleByPowerOfTen(-decimal);

输出:

1234.56

相关问题