2

我有一个使用整数的while循环,但我将它转换为大十进制,因为该值很高,我不确定如何使我的while循环使用大十进制而不是整数我的代码如下.

public String getsize()
{
  BigDecimal size = new  BigDecimal(mySize);
  int count = 0;
  String dataType = "";
while (size > 1000 )
  {   
   size = size.divide(size, 1000);
   count++;
  } 
  switch (count)
  {
    case 0:
    dataType = "Bytes";
    break;
    case 1:
    dataType = "KB";
    break;
    case 2:
    dataType = "MB";
    break;
    case 3:
    dataType = "GB";
    break;
    case 4:
    dataType = "KB";
    break;    
  }   
    return size + dataType ;
} 

错误出现在 while (size > 1000 ) 行,因为这是 size 为整数时的方法。有人可以告诉我使用 Big Decimal 作为大小的方法吗?我在想出它时遇到了一些麻烦
编辑:给出的解决方案,现在在我的分区行中弹出了一个不相关的问题我得到:“线程“主”java.lang.IllegalArgumentException:无效舍入模式中的异常”任何想法解决这个问题?我认为最好在这里发帖,然后提出一个全新的问题,但如果那是正确的,那就不好了。

4

5 回答 5

2

比较BigDecimals,使用compareTo方法;BigDecimalComparable。如果大于 ,该compareTo方法将返回一个大于 0 的整数。sizethousand

BigDecimal thousand = new BigDecimal(1000);
while (size.compareTo(thousand) > 0 )

顺便说一句,您似乎没有BigDecimal正确进行除法:

size = size.divide(size, 1000);

这将解释1000舍入模式,并会导致IllegalArgumentException. 我认为你只需要划分它:

size = size.divide(thousand);  // see above for BigDecimal "thousand" declaration

此外,案例 4 不正确;除以 1000 4 次(万亿)后,它应该是 TB 的“TB”:

case 4:
dataType = "TB";
break; 
于 2013-04-19T20:58:33.863 回答
2

您还必须将您比较的值包装在 a 中BigDecimal,并将它们与compareTo方法进行比较:

BigDecimal limit = new BigDecimal("1000");
while (size.compareTo(limit) > 0 ) {
    ...
}
于 2013-04-19T20:59:42.860 回答
2

你需要做:

BigDecimal compareVal = new BigDecimal(1000);
while(size.compareTo(compareVal) > 0) {
    ...
}

http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html#compareTo(java.math.BigDecimal)

于 2013-04-19T21:03:04.070 回答
1
compareTo(BigDecimal another)

http://docs.oracle.com/javase/6/docs/api/java/math/BigDecimal.html#compareTo(java.math.BigDecimal)

BigDecimal k = new BigDecimal("1000");
while(size.compareTo(k)>0)....
于 2013-04-19T20:58:23.687 回答
1

用这个:

while (size.compareTo(new BigDecimal(1000)) > 0) {
    // ...
}

更好的是,将1000值定义为局部变量:

final BigDecimal _1000 = new BigDecimal(1000);
while (size.compareTo(_1000) > 0) {
    // ...
}
于 2013-04-19T20:59:07.423 回答