Сложение

  • Автор темы Alexfear
  • Дата начала
A

Alexfear

Как сложить 2 числа тоесть 2,2+2
если начинаешь слаживать получается 4 а 0,2 отбрасывает так как прописано запятая!
Как можно этого избежать! Без запятых так как визуал бейсик ввыводит даные имено дроби через запятую!!
 
H

hosm

Tanya как-то поясняла преобразование строки с дробными числами в числовой формат:
Val() всегда! преобразует строку в число. Если в строке не число, то получим 0.
Но есть некоторые особенности преобразования строки к числам с десятичным разделителем. Например,

I) системный разделить - запятая
системный разделитель в строке:
val("0,4") = 0
CDbl("0,4") =0,4
несистемный разделитель в строке:
val("0.4") = 0,4
CDbl("0.4") => Type mismatch

II) системный разделить - точка
системный разделитель в строке:
val("0.4") = 0.4
CDbl("0.4") = 0.4
несистемный разделитель в строке:
val("0,4") = 0
CDbl("0,4") =0.4

Удивительные результаты ))) т.е. по-любому нужно извращаться. Определить разделитель, и в зависимости от этого действовать!

Т.о. в конкретно приведенном вами примере нужно знать, что там вводится и как вводится.
Так например, если при системном разделителе 'запятая' ввести 0.4 и использовать CDbl(), то возникнет ошибка.
А если при любом сист. разделителе ввести 0,4 и использовать Val(), то получим некорректный результат.

Добавлено: вы ж не целочисленной переменной результат присваиваете, надеюсь?
 
G

Gamlet

Скорее всего складываете в переменную типа intriger. Если критично то умножте переменные на 10(100, 1000, смотря сколько чисел после запятой), а при выводе разделите.
 
B

BStudio

Код:
Private Summand1 As Decimal = 2.2
Private Summand2 As Byte = 2  'Byte - не больше 255, Short - не больше 32767, Integer - не больше 2147483648, Long - вообще пипец =D
Private Amount As Decimal	 'Сокращайте использование оперативной памяти переменными, если не нужно большое число. (Мой совет)

Private Sub Addition()
Amount = Summand1 + Convert.ToDecimal(Summand2)
MessageBox.Show("Частное = " & Amount.ToString())
End Sub

Добавлено: ------------------------------------------------------------
А чтоб при чтении строковой переменной не было
проблем с запятыми\точками, сделайте так:

Код:
dcString = dcString.Replace(",", ".")  ' Замена в строке всех запятых на точки.
DecimalValue = Convert.ToDecimal(dcString) ' Конверт строки в десятичную переменную.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!