我需要把小数点分隔在一个长的,我已经尝试了几种方法,但我需要它是动态的,因为小数点分隔符可以改变,我已经尝试了 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
3条答案
按热度按时间noj0wjuj1#
如果我理解正确,这就是你想要达到的目标:
使用java.lang.math的pow方法计算数字的幂。
如果要使用变量的函数之一,请注意将变量声明为long类型的对象,而不是基元类型。
正如所建议的,只使用双变量而不是从一开始就使用长变量更简单:
zujrkrfu2#
你可以用给定的数字除以10^decimalplaces得到所需的数字。
输出:
amrnrhlw3#
所有其他的答案都建议改为
double
然后在显示前按10的倍数缩放。这将由于缩放操作中的精度损失而导致一些意外的结果。对于完整的,血淋淋的细节为什么,请阅读什么每一个计算机科学家应该知道浮点运算和浮点是打破?至于你的问题,你应该用
BigDecimal
. 转换自long
(或Long
)至BigDecimal
不会失去精度,并将始终产生预期的结果。bigdecimal甚至有一种方法可以为您进行缩放:
输出: