Double vs FLOAT - anlaşılmaz MathFloor hatası - sayfa 7

 
Maxim Kuznetsov :
Hedeflere bağlı olarak, bazen tam sayılara tamamen geçmeye değer. Çok fazla sinir kurtarıyor :-) Her nasılsa birçok, birçok seviyeyi doğru bir şekilde işaretlemenin gerekli olduğu bir görev vardı, önce double ile yoruldum ve sonra her şeyi 0'dan tam noktalara aktardım ve her şey kolay, basit ve hatasız.
Ben de öyle yaptım. Tam sayılara dönüştürülür.
 
Vladimir :

Görev gerektirmedikçe yuvarlama kullanmayın.


İşin aslı, görevler farklı :-)

 

Yuvarlama için MathFloor veya MathCeil kullanıyorsanız, orijinal sonucu istenen doğrulukta normalleştirmeniz gerekir.

Hesaplarken tam sayı yerine kesirli sayı çıkabileceğinden ve bu "kuyruk" nedeniyle sayı yanlış yuvarlandığından sonuç yanlıştır.
Örneğin:

double point= 0.01 ;
Print ( DoubleToStr ( 1156.12 /point, 15 ));
Print ( NormalizeDouble ( 1156.12 /point, _Digits ));

şimdi MathFloor ile yuvarlamayı deneyelim

double point= 0.01 ;
Print ( DoubleToStr ( MathFloor ( 1156.12 /point), 15 ));
Print ( MathFloor ( NormalizeDouble ( 1156.12 /point, _Digits )));
 

1.05 sayısını normalleştirirsem - temel olarak MathFloor işlevi olan 1.1'e normalleşir - ihtiyacım olanı döndürmez :-)

Çünkü MathFloor'u hiç kullanmazdım.

Ama görev farklı.

 

Но задача то другая.  

neden başka? az önce sonucu aşağı yuvarlamanız gerektiğini yazdınız - MathFloor tam da bunu yapıyor

 
Taras Slobodyanik :

neden başka? az önce sonucu aşağı yuvarlamanız gerektiğini yazdınız - MathFloor tam da bunu yapıyor

Evet!!! ama bir normalleştirme yaparsam, matematikte toparlayacak ve MathFloor artık bir anlam ifade etmeyecek

 

1156.12 numaralı örneğin hemen üstünde bu sayı hafızada 1156.119999999999891 olarak saklanır.

yani, onu yüzde birlik sayılara yuvarlamaya çalışırsanız (tamsayıya dönüştürme yoluyla), o zaman 1156.12 yerine 1156.11 sayısını alırsınız - bu, kafanızı karıştıran "özellik"tir.

 
Taras Slobodyanik :

1156.12 numaralı örneğin hemen üstünde bu sayı hafızada 1156.119999999999891 olarak saklanır.

yani, onu yüzde birlik sayılara yuvarlamaya çalışırsanız (tamsayıya dönüştürme yoluyla), o zaman 1156.12 yerine 1156.11 sayısını alırsınız - bu, kafanızı karıştıran "özellik"tir.

Evet teşekkür ederim.

Neden: