VBA тъпни

5 отговора 246 прегледа
#1

VBA тъпни

Някой може ли да ми обясни що за простотии са т'ва:

100.8 - 100.7 -> 0.0999999999999943
CSng(100.8) - CSng(100.7) -> 0.1000061
CSng(100.8) - 100.7 -> 0.10000305175781

и само:

CSng(100.8 - 100.7) -> 0.1
CDec(100.8) - CDec(100.7) -> 0.1

работят (ама трябва да ги декларирам Variant вместо Double).

<цензура> ти Визуалния Бъзик, <цензура> ти чудото...

Редактирано от Щиpлиц на

Отговор
в отговор на VBA #2

Re: VBA тъпни

Ам'че тогава ги декларирай като Single, защо обвиняваш Бейсика за нещо, което е ограничено от хардуера?

Сегашните версии на Бейсик са достатъчно разширени, и поддържат доста добра точност на изчисленията.

Ограниченията са:
Double:
от -1.79769313486232E308
до -4.94065645841247E-324
от 4.94065645841247E-324
до 1.79769313486232E308

Single:
от -3.402823E38
до -1.401298E-45
от 1.401298E-45
до 3.402823Е38

----------------------------------
помислих, хареса ми, помислих пак...
Отговор
в отговор на VBA #3

Re: VBA тъпни

Това не е никаква тъпня!
И си е абсолютно нормално за числа, които се представят в вид мантиса+експонента. Такива са Single и Double.
За да си нямаш проблеми от подобен вид, използвай Currency или Decimal.
И изобщо не ми е ясно защо държиш точно да използваш Double.

Но това не значи, че във VB няма тъпни.
Тъпня според мен е Option Base оператора и това, че в документацията се твърди, че масивите можели да започват от 0 и 1.
Това дори не е тъпня, ами си е чиста простотия, затова във VB.NET този оператор вече липсва и масивите винаги започват от 0.

Бии, за да те уважават!
Отговор
в отговор на пpoГЪPMИcт #4

Re: VBA тъпни

хм, как от 0 и от 1?
почват си от нула, но за ламерските цели са предвидени не до н-1, а до н. с една дума искаш 100, дава ти 101 клетки
а какво ще кажеш за това че може да ползваш недеклариран масив до 10 елемента?

Отговор
в отговор на zaphod #5

Re: VBA тъпни

Твърди се, че масивите започвали от 0 или 1. А това е тъпо, защото не е така.
А това, което ти твърдиш, че масивите започват винаги 0, също не е вярно, според мене. Пример (доказателство):
Ако направиш масив с долна граница 80 например, и горна 100. То тогава ако се опиташ да достъпиш всички елементи под 80, ще ти се появи съобщение за грешка N9 : "Subscript out of range". Което от своя страна показва, че елементите наистина са 21, а не 101 както ти твърдиш.

Бии, за да те уважават!
Отговор
в отговор на пpoГЪPMИcт #6

Re: VBA тъпни

ами имах предвид сличаи от типа dim a(100) тогава мисля е така както го казах. това мисля си е по стандарта за бейсика.

Отговор