Új hozzászólás Aktív témák

  • Karma
    félisten

    Új vagyok android témakörben, de most hirtelen belefutottam egy furcsaságba.
    double adattípus mennyire jó számításokhoz?
    debugolom az appot, és ezt látom a kódban
    double fogy=0;
    double mn_kezdoallas=OraErtek(mn_min); // debugger 14170.3-t ír ki
    double mn_vegallas=OraErtek(mn_max); // debug szerint 15274.0 Valóban ennyi, én adom vissaz az értékeket
    fogy=mn_vegallas-mn_kezdoallas; // 1103.7000000000007
    float fogy2=(float)mn_vegallas-(float)mn_kezdoallas; // 1103.7002

    A kérdésem az, hogy valamit el...tam, vagy tényleg ennyire pontos (pontatlan) már 1 tizedesjegynél is?
    Számít valamit az, hogy android 4.2-t adtam meg MinSDK versionnak (a telefonomon 4.2 van, nincs kitkat, lolipo), de a targetsdk már 23-as? Tegnap ugyanis frissített az android studio, már a 6-os droidhoz való sdk-t is lehúzta.

    Az IEEE754 lebegőpontos számok már csak ilyenek, hja. A tízes számrendszerben leírható számok kettesben elég gyakran csak végtelen törtként írhatóak fel. Nem véletlenül szigorúan tilos bármilyen pénzügyi, vagy precíziót igénylő számításhoz használni.

    Van helyette BigDecimal osztály, ami bár sokkal körülményesebb (immutable, és metódusokat kell hívni az operátorok helyett), mégis tökéletes pontosságot ad, használd azt.

    A floatra castolást meg pláne felejtsd el, hacsak nem valami androidos API-nak kell floatot átadni.

    ---

    Az SDK verziós kérdésre: a double működésében nem számít. A target SDK-t célszerű a legújabbon tartani, hogy az új telefonokon ne legyen gond (figyelmeztet is az IDE, ha le vagy maradva). A minimum pedig az, aminél régebbire fel se települhet az alkalmazásod.

    Gyakorlatilag azokat az osztályokat használhatod gondtalanul, amik a min. SDK-ban már elérhetőek voltak. Ha nagyon muszáj, újabb rendszereken, verzióellenőrzésekkel körülvéve a target SDK-ból is hívhatsz dolgokat, de ezek a sorok felrobbannának régebbi telefonokon.

Új hozzászólás Aktív témák