2016-12-21 13 views
0
// The given input 
String input = "99999999.99"; 

// We need only 2 decimals (in case of more than 2 decimals is in input) 
Float value = Float.valueOf(input); 
DecimalFormat df = new DecimalFormat("#0.00"); 
input = df.format(value); 
value = new Float(input); 

// Now we have a clear 2 decimal float value 
// Check for overflow 
value *= 100; // Multiply by 100, because we're working with cents 

if (value >= Integer.MAX_VALUE) { 
    System.out.println("Invalid value"); 
} 
else { 
/// 
} 

Заявление не работает, условие не работает.Как узнать, превышает ли значение float значение Integer.MAX_VALUE?

Каков правильный способ сравнения поплавка с целым значением?

+0

Обратите внимание, что точность 'Float' не достаточно хорошо, чтобы обрабатывать весь диапазон в' Integer'. Если вы обрабатываете деньги, вы должны избегать использования чисел с плавающей запятой, когда это возможно. –

ответ

3

В коде нет ничего плохого. 99999999.99 раз 100 равно 9999999999. Это больше, чем max int == 2147483647 (это 2^31 -1). Если вы хотите хранить большие целые числа, используйте long.

Дальнейшая разработка, если это не ваша проблема.

1

попробовать это:

public static void main(final String[] args) { 
    // The given input 
    String input = "99999999.99"; 

    // We need only 2 decimals (in case of more than 2 decimals is in input) 
    Float value = Float.parseFloat(input); 
    DecimalFormat df = new DecimalFormat("#0.00"); 
    DecimalFormatSymbols custom = new DecimalFormatSymbols(); 
    custom.setDecimalSeparator('.'); 
    df.setDecimalFormatSymbols(custom); 
    input = df.format(value); 
    value = new Float(input); 

    // Now we have a clear 2 decimal float value 
    // Check for overflow 
    value *= 100; // Multiply by 100, because we're working with cents 

    if (value >= Integer.MAX_VALUE) { 
     System.out.println("Invalid value"); 
    } else { 
     /// 
    } 
} 

имеют хороший день

+0

Ваш код создает исключение, поскольку используемый десятичный разделитель был ',' –