gpt4 book ai didi

java - 将一个数字格式化为另一个数字的格式

转载 作者:行者123 更新时间:2023-11-30 06:11:36 25 4
gpt4 key购买 nike

有没有办法使用 Java 的标准库将一个数字格式化为另一个数字的格式?

假设我有一个数字double a = 3.03

我可以使用数字 a 作为格式化模型,以便数字 double b = 56.0934143 格式化为字符串 "56.09"通过做这样的事情 formatNumber(b, a)

最佳答案

你问的在某种意义上是可能的,但可能会变得棘手......

挑战源于 float 的表示方式。参见 this discussion .查看 float ,很难确定用户想要的以 10 为基数的位数。

例如,如果您用单精度 float 表示 3.03 并转换回以 10 为基数,您会得到更接近 3.029999971389771 的值。这是因为 3.03 无法在 base 2 中完美表示。

因此,您将需要一些复杂的逻辑来弄清楚如果 float 是 3.029999971389771,用户可能需要两位小数 3.03。某种意义上是可行的。如果不添加额外的错误,Java 库就可以做到。 Excel does它,但它是一个比您想象的更棘手的问题。


您可能会得到一些主要与使用 BigDecimal 的其他一些答案一起使用的东西。如果您作为 a 引用的数字是一个硬编码常量,它可能工作正常,但如果不是,您很可能偶尔会得到比预期更多的数字。

大十进制方法出错的例子1

double x1 = 3.1;   
double x2 = Math.acos(Math.cos(x1)); //take the cosine and then inverse
//to introduce a TINY bit more error
//to floating point representation of 3.1
BigDecimal b = BigDecimal.valueOf(x2);
System.out.println(b);

打印出来的是什么?

3.1000000000000005

当我们可能想要一个 1 位数字时,我们有一个 16 位数字。

浮点不精确的另一个例子

double x1 = 3.03;   
double x2 = 0;
for(int i = 0; i < 100; i++)
x2 += x1;
System.out.println(x2);

我们给自己加了 3.03 到 100 次。我们得到303吗?不!

302.99999999999966

你想在这里打印多少位数?

关于java - 将一个数字格式化为另一个数字的格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33913944/

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