2015-04-17 3 views
1

Я нашел этот пример программы, которая преобразует ввод и печатает его на основе значения. Но я заметил, что если я добавлю большее значение, я получу ошибкуУвеличить размер в конверте

integer number too large: 9394343298 

Есть ли способ исправить это?

String readableFileSize = readableFileSize(939343298); 

System.out.println("Result " + readableFileSize); 

public static String readableFileSize(long size) 
{ 
    if (size <= 0) 
     return "0"; 
    final String[] units = new String[] {"B", "kB", "MB", "GB", "TB"}; 
    int digitGroups = (int) (Math.log10(size)/Math.log10(1024)); 
    return new DecimalFormat("#,##0.#").format(size/Math.pow(1024, digitGroups)) + " " + units[digitGroups]; 
} 
+0

работает для меня: http://ideone.com/NEbz6s – Zelldon

+0

@Zelldon, вы не пытались изменить '939343298' на' 9394343298'. – Andremoniy

+0

@Andremoniy aah спасибо, что ты прав! :) – Zelldon

ответ

1

Просто добавьте L в конце номера, чтобы пометить его как длинное значение:

String readableFileSize = readableFileSize(9394343298L);

0

Проблема заключается в том, что если вы используете постоянное значение по умолчанию является целым числом, но целое число макс размер 2147483647, который < 9394343298. Так появляется ошибка компиляции:

Main.java:15: error: integer number too large: 9394343298 
     String readableFileSize = readableFileSize(9394343298); 

Таким образом, либо вы используете «L» после значения константы, чтобы пометить значение как длинное, либо использовать длинную переменную, которая будет передана в функцию.

Как так:

long value = 9394343298L; 
String readableFileSize = readableFileSize(value); 

Смотрите пример:

import java.util.*; 
import java.lang.*; 
import java.io.*; 
import java.text.DecimalFormat; 

public class Ideone 
{ 

    public static void main (String[] args) throws java.lang.Exception 
    { 
     String readableFileSize = readableFileSize(9394343298L); 
     System.out.println("Result " + readableFileSize); 
    } 



    public static String readableFileSize(long size) 
    { 
      if (size <= 0) 
       return "0"; 
      final String[] units = new String[] 
      { 
       "B", "kB", "MB", "GB", "TB" 
      }; 
      int digitGroups = (int) (Math.log10(size)/Math.log10(1024)); 
      return new DecimalFormat("#,##0.#").format(size/Math.pow(1024, digitGroups)) + " " + units[digitGroups]; 
    } 
} 

рабочего примера:

http://ideone.com/QA1sCL

+0

К сожалению, я не могу добавить L в конце. Есть ли способ реорганизовать код для принятия больших значений? –

+0

Потому что вы читаете int со стандартного ввода или почему? – Zelldon

+0

Я получаю значение от сетевого клиента. Я не могу сделать это изменение - это 3p-библиотека. –