gpt4 book ai didi

java - 如何格式化小数精度

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:31:34 27 4
gpt4 key购买 nike

如何格式化小数精度,如下所示:

double d = 1/3 返回 0.3333333333333333 并且在数学上 3 无限重复。

d = ((double)3)/(double)41; 返回 0.07317073170731707 并且此处重复 07317

现在,要求像下面这样格式化输出

0.3333333333333333 应格式化为 0.(3),因为 3 重复。

同样 0.07317073170731707 应该被格式化为 0.(07317) 作为 07317 重复

我查看了 DecimalFormat 类,但我只能格式化精度数。

public static void main(String[] args) {
DecimalFormat formatter = new DecimalFormat("#0.'('##')'");

double d = ((double)1)/ (double)3;
System.out.println("formatted "+formatter.format(d));
System.out.println(d);


d = ((double)1)/ (double)2;
System.out.println("formatted "+formatter.format(d));
System.out.println(d);


d = ((double)3)/ (double)41;
System.out.println("formatted "+formatter.format(d));
System.out.println(d);

}

输出:

formatted 0.33()
0.3333333333333333
formatted 0.5()
0.5
formatted 0.07()
0.07317073170731707

Java 中是否有任何内置类可用于实现相同的目的?

最佳答案

正如评论中所指出的,如果您只有一个字符串表示,首先,没有办法判断它是否真的有一些重复的部分,或者精度是否不够高。

但是,从您的样本来看,您似乎实际上想要找到分数的重复部分,其中您知道分子和分母都是精确整数。这不是一个太难的问题;例如,您可以查看 https://codereview.stackexchange.com/questions/87522/decimal-expansion-of-a-rational-number

===更新===

我正在研究一个表示有理数的类,其中分子和分母为 BigIntegers(并假设尽可能减少)。在那里,我实现了一种方法来生成十进制字符串的表示形式,并得出以下结果:

public String toDecimalString() {

var result = new StringBuilder();

var remainders = new HashMap<BigInteger, Integer>();

if(!isNonNegative()) result.append("-");
var divAndRem = numerator.abs().divideAndRemainder(denominator);
result.append(divAndRem[0].toString());

if(isWholeNumber()) return result.toString();

result.append(".");

int currentPosition = result.length();
remainders.put(divAndRem[1], currentPosition);

while(!divAndRem[1].equals(BigInteger.ZERO)) {
divAndRem = divAndRem[1].multiply(BigInteger.TEN).divideAndRemainder(denominator);
result.append(divAndRem[0].toString());
if(remainders.containsKey(divAndRem[1])) {
int periodStart = remainders.get(divAndRem[1]);
return result.substring(0, periodStart)+"["+result.substring(periodStart)+"]";
}
remainders.put(divAndRem[1], ++currentPosition);
}

return result.toString();

}

关于java - 如何格式化小数精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54129458/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com