Autor Wątek:  Dziwna arytmetyka w MaxScript  (Przeczytany 2607 razy)

0 użytkowników i 1 Gość przegląda ten wątek.

Offline wasyl

  • Wiadomości: 276
  • Permanentny Inwigilator Sieciowy
    • Zobacz profil
  • Otrzymane polubienia: 0
Dziwna arytmetyka w MaxScript
« dnia: 11 Września 2007, 01:00:35 »
Witam!!!
Pracuję nad małą rozbudową skryptu i w trakcie testowania trafiłem na ciekawą rzecz.
Ile to jest: (6.2 - 6) * 10 = ?
Zapewne większość matematyków odpowie, że 2. Ale wg.Autodesk-a: 1 :).
Mam takie linijki kodu:
ulam = (6.2 - 6) * 10
str_a = ulam as string
str_b = (ulam as integer) as string
str_a zwróci tekst "2.0" a str_b już zwróci "1". Winna temu jest konwersja "as integer", która ma odcinać część ułamkową. Ta jednak robi widocznie co innego :). Ktoś wie czemu tak jest i jak tego uniknąć?

Przygarnę fotki na tekstury obiektów!

Offline Ra

  • Zasłużony dla Symulatora
  • Wiadomości: 6306
  • Ostatni gasi światło...
    • Zobacz profil
    • Instalator+Starter+Edytor
  • Otrzymane polubienia: 336
Odp: Dziwna arytmetyka w MaxScript
« Odpowiedź #1 dnia: 11 Września 2007, 01:08:22 »
Zapewne wynik wychodz 1.9999999 i po obcięciu części ułamkowej zostaje 1. To jest typowe zachowanie konwersji na integer. Spróbuj poszukać funkcji typu Round() i nią przekształcić. Może też pomóc inne zapisanie wyrażenia, np. 6.2*10-60.
¯\_( ͡° ͜ʖ ͡°)_/¯ Ra

Polecam: kręgarz Wojciech Walczak, projekt masarni

Offline ShaXbee

  • Administrator
  • Wiadomości: 1984
    • Zobacz profil
  • Otrzymane polubienia: 2
Odp: Dziwna arytmetyka w MaxScript
« Odpowiedź #2 dnia: 11 Września 2007, 16:10:59 »
Cytuj
fn roundInt n = (n+0.5) as integer

Snippet ze strony http://forums.cgsociety.org/archive/index.php/t-518074.html