Есть ли способ перебора словаря в форме ключа: [Value1: [Value2]]?

Представление значений изменяется из-за контрактов методов, которые преобразуют числовые значения в String, соответственно java.lang.Float#toString(float) и java.lang.Double#toString(double), тогда как фактическое значение остается неизменным. В Javadoc есть общая часть обоих вышеупомянутых методов, которая разрабатывает требования к представлению значений String:

. Должна быть хотя бы одна цифра для представления дробной части, а за ее пределами , но только столько цифр, сколько требуется, чтобы однозначно отличать значение аргумента от смежных значений

blockquote>

. Чтобы проиллюстрировать сходство значимых частей для значений обоих типов, можно выполнить следующий фрагмент :

package com.my.sandbox.numbers;

public class FloatToDoubleConversion {

    public static void main(String[] args) {
        float f = 125.32f;
        floatToBits(f);
        double d = (double) f;
        doubleToBits(d);
    }

    private static void floatToBits(float floatValue) {
        System.out.println();
        System.out.println("Float.");
        System.out.println("String representation of float: " + floatValue);
        int bits = Float.floatToIntBits(floatValue);
        int sign = bits >>> 31;
        int exponent = (bits >>> 23 & ((1 << 8) - 1)) - ((1 << 7) - 1);
        int mantissa = bits & ((1 << 23) - 1);
        System.out.println("Bytes: " + Long.toBinaryString(Float.floatToIntBits(floatValue)));
        System.out.println("Sign: " + Long.toBinaryString(sign));
        System.out.println("Exponent: " + Long.toBinaryString(exponent));
        System.out.println("Mantissa: " + Long.toBinaryString(mantissa));
        System.out.println("Back from parts: " + Float.intBitsToFloat((sign << 31) | (exponent + ((1 << 7) - 1)) << 23 | mantissa));
        System.out.println(10D);
    }

    private static void doubleToBits(double doubleValue) {
        System.out.println();
        System.out.println("Double.");
        System.out.println("String representation of double: " + doubleValue);
        long bits = Double.doubleToLongBits(doubleValue);
        long sign = bits >>> 63;
        long exponent = (bits >>> 52 & ((1 << 11) - 1)) - ((1 << 10) - 1);
        long mantissa = bits & ((1L << 52) - 1);
        System.out.println("Bytes: " + Long.toBinaryString(Double.doubleToLongBits(doubleValue)));
        System.out.println("Sign: " + Long.toBinaryString(sign));
        System.out.println("Exponent: " + Long.toBinaryString(exponent));
        System.out.println("Mantissa: " + Long.toBinaryString(mantissa));
        System.out.println("Back from parts: " + Double.longBitsToDouble((sign << 63) | (exponent + ((1 << 10) - 1)) << 52 | mantissa));
    }
}

В моей среде выход:

Float.
String representation of float: 125.32
Bytes: 1000010111110101010001111010111
Sign: 0
Exponent: 110
Mantissa: 11110101010001111010111
Back from parts: 125.32

Double.
String representation of double: 125.31999969482422
Bytes: 100000001011111010101000111101011100000000000000000000000000000
Sign: 0
Exponent: 110
Mantissa: 1111010101000111101011100000000000000000000000000000
Back from parts: 125.31999969482422

Таким образом, вы можете видеть, что знак значений, экспонент одинаковы, а его мантисса была расширена

Используемая логика извлечения чисел с плавающей запятой: 1 и 2 .

g7]

0
задан Rakesha Shastri 17 January 2019 в 10:08
поделиться

1 ответ

Совершенно ясно, как это?

for (key, value) in col_read {
    print(key)
    for (innerKey, innerValue) in value {
        print(innerKey)
        for number in innerValue {
            print(number)
        }
    } 
}

PS - Используйте lowerCamelCase для имен переменных, как упомянуто в Рекомендации по разработке API [ 111].

0
ответ дан Rakesha Shastri 17 January 2019 в 10:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: