Funkce která odřízne x deseiných míst v double? – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Funkce která odřízne x deseiných míst v double? – C / C++ – Fórum – Programujte.comFunkce která odřízne x deseiných míst v double? – C / C++ – Fórum – Programujte.com

 

Hans
~ Anonymní uživatel
36 příspěvků
10. 3. 2025   #1
-
0
-

Mám funkci, která vrací výsledek jako číslo double v intervalu 0,0 - 100,0, mě zajímají pouze výsledky jako 99,90 ale takovy tam nebude protože nejbližší výsledek bude něco jako 99,90143. Otázka tedy je zda existuje knihovní funkce, která umí u double odříznout vše od řekněme třetího desetinného místa?
Nebo musím použít metodu vynásobit výsledek 100x a odříznout desetinná místa jako celek.

Nahlásit jako SPAM
IP: 89.102.19.–
Kit+15
Guru
10. 3. 2025   #2
-
0
-

#1 Hans
U double nelze odříznout desetinná místa, protože 99,9 nelze zobrazit v double. Vždy jen číslo o chlup menší nebo větší, ale nikdy přesně. Z těchto důvodů se na taková čísla používá datový typ decimal, který však jazyk C nemá. Databáze ho však mívají.

Řešením je vynásobení 100 a odříznutí desetinných míst.

Nahlásit jako SPAM
IP: 2a00:1028:83a6:646a:3b96:a366:475c:c681...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Hans
~ Anonymní uživatel
36 příspěvků
10. 3. 2025   #3
-
0
-

#2 Kit
Mě celkem nevadí, že to není přesně 99,90, ale 99,90XXX, dokonce uvádím, že ve výsledku 99,90 nebude, úloha zni, najít číslo nejbližší 99,90. Zcela přesně má funkce postupně vychrlí 100000 výsledků z intervalu 0.0 - 100.0 a já z nich chci vybrat 1001, které budou nejblíže 0.00, 0,10, 0.20, ... 99.80, 99.90, 100,00, přičemž ně dokonce ani nezajímá onen výsledek, ale jen jeho pořadové čilo, které reprezentuje čas v časové doméně. Nicméně na to musím provést porovnání. Holt to pořeším vynásobením 100x, normálně bych to tak řešil, ale je to tak trochu didaktická úloha  a chtěl jsme se tomu vyhnout.

Nahlásit jako SPAM
IP: 89.102.19.–
Kit+15
Guru
10. 3. 2025   #4
-
0
-

#3 Hans
Odečti 99,9 a z toho udělej absolutní hodnotu. Najdi nejmenší výsledek.

Nahlásit jako SPAM
IP: 37.188.142.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
JerryM0
Věrný člen
13. 3. 2025   #5
-
+1
-
Zajímavé
Kit +

#1 Hans
https://www.techonthenet.com/c_language/standard_library_functions/math_h/ceil.php

https://www.geeksforgeeks.org/ceil-floor-functions-cpp/

existuje ještě možnost, že prostě převedeš číslo na string a pak odseparuješ co potřebuješ, ale upozorňuju že po převodu stringu na číslo se opět muže objevit číslo typu 99.9999999998 atd podle systémi IEEE754

viz vysvětlení zde

https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html

https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-numbers-2012-edition/

https://www.yosefk.com/blog/consistency-how-to-defeat-the-purpose-of-ieee-floating-point.html

Nahlásit jako SPAM
IP: 2a00:1028:83bc:e52a:692c:ee23:31ff:bbb6...–
Zjistit počet nových příspěvků

Přidej příspěvek

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 7 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032025 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý