Номер денежного формата VB.NET

Я пытаюсь преобразовать математический результат примера денежного формата:

Dim num1 As Integer = 2000
Dim num2 As Integer = 500

msgbox(cDbl(num1 + num2))

Он возвращает только 2500, которые мне нужно вернуть свои 2500,00, если кто-нибудь знает, как я был бы очень полезен, спасибо.


person John Nuñez    schedule 13.02.2012    source источник


Ответы (7)


Ваш MsgBox показывает вам значение, но он не отформатировал его, как вы этого не просили.

Если вы пошли немного дальше и отформатировали результат как строку, вы получите желаемый формат, например:

Dim num1 As Double = 2000
Dim num2 As Double = 500
Dim sum As Double = num1 + num2

MsgBox(sum.ToString("0.00")) ' Adjust format string to suit
person Rowland Shaw    schedule 13.02.2012
comment
ваш ответ правильный, но есть ли способ добавить запятые? (2,500.00) Спасибо :) - person John Nuñez; 13.02.2012
comment
Вот почему я сказал, что настроить строку формата в соответствии с документацией MSDN вполне достаточно. через и даже позволяет специально указывать валюты - person Rowland Shaw; 13.02.2012

Во-первых, вы должны использовать Decimal вместо Double при работе с денежными значениями. Double имеет некоторые проблемы с округлением.

Во-вторых, вы можете использовать форматирование строки:

Dim num1 As Integer = 2000
Dim num2 As Integer = 500
Diml value As Decimal = CDec(num1 + num2)
Dim formattedValue As String = String.Format("{0:n}", value)

msgbox(formattedValue)
person Dennis Traub    schedule 13.02.2012

Строка стандартного числового формата

- отличный ресурс для общего форматирования чисел, верхний из которых - валюта (это учитывает различия в культуре)

"C" или "c" для валюты

  • Поддерживаются: все числовые типы.
  • Спецификатор точности: количество десятичных цифр.
  • Спецификатор точности по умолчанию: определяется System.Globalization.NumberFormatInfo.

Дополнительные сведения: Описатель формата валюты («C»).

  • 123.456 ("C", en-US) -> $123.46
  • 123.456 ("C", fr-FR) -> 123,46 €
  • 123.456 ("C", ja-JP) -> ¥123
  • -123.456 ("C3", en-US) -> ($123.456)
  • -123.456 ("C3", fr-FR) -> -123,456 €
  • -123.456 ("C3", ja-JP) -> -¥123.456
person Gent    schedule 13.02.2012

Если вы хотите, чтобы формат был валютным, подойдет любой из них:

    Dim num1 As Integer = 2000
    Dim num2 As Integer = 500
    MsgBox(String.Format("{0:C2}", num1 + num2))

Or

    Dim num1 As Integer = 2000
    Dim num2 As Integer = 500
    Dim sum As Integer = num1 + num2

    MsgBox(sum.ToString("C2"))
person Jon    schedule 13.02.2012

удвоить формат валюты

value = 1500,20 TL

ctype(value, double)

return 1500,20

удвоить форматирование валюты

образец

value = 1500,1995

formatcurrency(value,2)

return = 1500,20 TL moneysembol (TL , $ ,vs..)
person Umit SARIDOGAN    schedule 20.12.2012
comment
Если вы вставляете код в свой ответ, используйте тег {}, чтобы выделить его синтаксис. Ваш ответ будет намного легче читать. - person Nick Ryan; 20.12.2012

Взгляните на документацию String.Format, вы найдете там то, что вам нужно.

person JSR    schedule 13.02.2012

Обычно вы не используете Integer в качестве типа данных для денежных значений. Вместо этого используйте Double.

Я уверен, что есть много способов отформатировать выходную строку как денежное значение.

Один из известных мне методов уже был объяснен Роландом Шоу. Так что я перейду к другому. Это встроенная функция FormatCurrency. Он выведет строку в виде значения валюты плюс с символом валюты, определенным в вашей системе.

Dim num1 As Double = 2000
Dim num2 As Double = 500
Dim ans As Double = num1 + num2

MessageBox.Show(FormatCurrency(ans))

Подробнее о FormatCurrency см. здесь .

person Isuru    schedule 13.02.2012
comment
downvote - double - не лучший тип данных для валютных ценностей. Могут возникнуть проблемы с округлением. Вместо этого следует использовать тип Decimal. - person JSR; 14.02.2012