Преобразовать строку в двойную без научного обозначения c - PullRequest
0 голосов
/ 23 марта 2020

Я искал inte rnet, но я не смог найти никакого решения (возможно, я искал плохо).
Я хочу преобразовать String "108595000.5" в double, и у меня есть использовали эти методы:

Double.parseDouble("108595000.5");
Double.valueOf("108595000.5");

К сожалению, оба они возвращают 1.08595E8.
Как я могу без проблем преобразовать это String в double?

Ответы [ 2 ]

2 голосов
/ 23 марта 2020

Методы, которые вы использовали, не возвращают 1.08595E8, вместо этого они возвращают число, и на что вы жалуетесь, это представление этого числа в консоли (или как String) .

Однако вы можете указать, как вывести double самостоятельно с указанным форматированием, см. Этот пример:

public static void main(String[] args) {
    String value = "108595000.5";
    // use a BigDecimal to parse the value
    BigDecimal bd = new BigDecimal(value);
    // choose your desired output:
    // either the String representation of a double (undesired)
    System.out.println("double:\t\t\t\t\t" + bd.doubleValue());
    // or an engineering String
    System.out.println("engineering:\t\t\t\t" + bd.toEngineeringString());
    // or a plain String (might look equal to the engineering String)
    System.out.println("plain:\t\t\t\t\t" + bd.toPlainString());
    // or you specify an amount of decimals plus a rounding mode yourself
    System.out.println("rounded with fix decimal places:\t" 
                        + bd.setScale(2, BigDecimal.ROUND_HALF_UP));
}
double:                             1.085950005E8
engineering:                        108595000.5
plain:                              108595000.5
rounded with fix decimal places:    108595000.50
0 голосов
/ 23 марта 2020

попробуйте использовать

value = new BidDecimal(yourString);
doubleValue = value.doubleValue();

, если вы хотите точное значение.

Если вы хотите 2 числа после ","

double a = yourDouble; 
System.out.printf("%.2f",a)
...