java - Java 中的大数比较

标签 java comparison decimal precision bigdecimal

这是 BigDecimal 比较的问题还是预期的输出错误?

import java.math.*;
import java.util.*;
class Solution{

 public static void main(String []argh)
 {

    int res;
    String temp = "";
    Scanner sc= new Scanner(System.in);
    MathContext mc = new MathContext(100, RoundingMode.FLOOR);
    int n=sc.nextInt();
    String []s=new String[n+2];
    for(int i=0;i<n;i++)
    {
        s[i]=sc.next();
    }

    for(int i=0;i<n;i++){
        for(int j=0;j<n;j++){
            res = new BigDecimal(s[i], mc).compareTo(new BigDecimal(s[j], mc));
            if(res == 1){
                temp = s[i];
                s[i] = s[j];
                s[j] = temp;
            }
        }
    }

    for(int i=0;i<n;i++)
    {
        System.out.println(s[i]);
    }

 }
}
Sample Input:     9 -100 50 0 56.6 90 0.12 .12 02.34 000.000

Expected Output: 90 56.6 50 02.34 0.12 .12 0 000.000 -100

My Output:       90 56.6 50 02.34 .12 0.12 0 000.000 -100

最佳答案

那都是因为比较的顺序

您的算法正在向左侧复制更大的值。让我们考虑每次迭代后字符串数组的状态。当 i=0 数组将是:

i=0: -100 50 0 56.6 90 0.12 .12 02.34 000.000

因为 -100 是最小的,所以留在原处。继续:

i=1: 50 -100 0 56.6 90 0.12 .12 02.34 000.000 

因为 50 大于 -100 它将被复制到左边。继续:

i=2: 50 0 -100 56.6 90 0.12 .12 02.34 000.000 
i=3: 56.6 50 0 -100 90 0.12 .12 02.34 000.000 
i=4: 90 56.6 50 0 -100 0.12 .12 02.34 000.000 

i=5s[5]0.12 时,您感兴趣的事情将发生:

i=5: 90 56.6 50 0.12 0 -100 .12 02.34 000.000 

0.12 将比 .12 更早进行比较,并将在 0 之前取代它。现在,当 i=6 时,我们将比较 .12:

i=6: 90 56.6 50 0.12 .12 0 -100 02.34 000.000

因为 .12 并不比 0.12 大,而且它比 0.12 比较它会保留在 0.12 的右侧。

因此,BigDecimal 比较没有问题。它以正确的方式工作。

希望我的解释不会太复杂。

关于java - Java 中的大数比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35933171/

相关文章:

numbers - 如何仅使用 Ada 中的 Image 功能来控制显示的小数位数?

ruby-on-rails - BigDecimals 的总和最终成为整数 [Ruby on Rails]

java - 在 Java 中将分数转换为单词

java - 使用 Spring 框架从 Web 表单接收对象数组

vba - 比较 2 张纸中的数据并找出不匹配的地方

python - python 中区分大小写的路径比较

java - java代码中出现NoSuchField错误,但字段存在

java - 使用 react 器提供静态内容

image - 类似的图像搜索软件(如 TinEye)

python - 在Python中将字符串转换为十进制