gpt4 book ai didi

java - 如何将字符串统一解析成BigDecimal?

转载 作者:行者123 更新时间:2023-11-29 03:03:29 24 4
gpt4 key购买 nike

我正在获取字符串作为程序的输入,但这些字符串可以用多种格式表示。例如:

  • 8900
  • 8.9E+3
  • 89E+2
  • 8900.000

所有这些数字在数学上都是相等的,下面的程序也说明了匹配:

public class BigDecimalMain {
public static void main(String... args) {
BigDecimal a = new BigDecimal("8900");
BigDecimal b = new BigDecimal("8.9E+3");
BigDecimal c = new BigDecimal("89E+2");
BigDecimal d = new BigDecimal("8900.000");

System.out.println(a.compareTo(b));
System.out.println(a.compareTo(c));
System.out.println(a.compareTo(d));
}
}

输出:

0
0
0

我的程序使用 .equals 来匹配对象,但在上述情况下未能给出正确答案。

问题:如何将字符串统一解析为BigDecimal?我的意思是:

find a function PARSE, that    
for any STR1 && STR2
PARSE(STR1).compareTo(PARSE(STR2)) == 0 <=> PARSE(STR1).equals(PARSE(STR2))

最佳答案

对于通用比例,您可以使用 setScale(xxx):

    {
BigDecimal a = new BigDecimal("8900");
BigDecimal b = new BigDecimal("8.9E+3");
BigDecimal c = new BigDecimal("89E+2");
BigDecimal d = new BigDecimal("8900.000");

System.out.println(a.compareTo(b));
System.out.println(a.compareTo(c));
System.out.println(a.compareTo(d));
System.out.println(a.equals(b));
System.out.println(a.equals(c));
System.out.println(a.equals(d));
}
{
BigDecimal a = new BigDecimal("8900").setScale(5);
BigDecimal b = new BigDecimal("8.9E+3").setScale(5);
BigDecimal c = new BigDecimal("89E+2").setScale(5);
BigDecimal d = new BigDecimal("8900.000").setScale(5);

System.out.println(a.compareTo(b));
System.out.println(a.compareTo(c));
System.out.println(a.compareTo(d));
System.out.println(a.equals(b));
System.out.println(a.equals(c));
System.out.println(a.equals(d));
}

表演

0
0
0
false
false
false
0
0
0
true
true
true

关于java - 如何将字符串统一解析成BigDecimal?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33440485/

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