2016-05-16 131 views
-2

我有远程数据,我必须显示两项的总成本。 这里是我创建解决如何做转换来添加两个项目的样品:如何将货币转换为Decimal vb.net?

Dim test1 As String = "ZAR897.83" 
Dim test2 As String = "ZAR900.83" 
Dim t1 As Double = Val(test1) 
Dim t2 As Double = Val(test2) 
Dim TotalPrice As Decimal = 0.00 
TotalPrice += CDec(t1) 
TotalPrice += CDec(t2) 

在上面的代码T1结果值是0.0,这是T2相同。

任何帮助添加这些值将不胜感激。

编辑:这个问题已经被问,是没有答案在这里:Convert currency to decimal in VB.NET

编辑:我没有表现出各种不同的铸件我试过,因为所有我试过铸件给编译错误(我假设毫无意义,因为它们在某种意义上更不正确)。之所以我得到错误,无论我如何尝试投出数字,都是由于我的visual studio期望逗号而不是十进制值的时间段,这是由于Windows中的区域设置不正确。

+1

尝试'Decimal.Parse(T1,NumberStyles.Currency)'。 –

+0

@VisualVincent“重载解析失败,因为没有可访问的'Parse'可以用这些参数调用:”它从那里继续添加额外的文本。 – Nightwolf

+1

如果“ZAR”应该是南非兰特,那么不会,你不会从Val()或Decimal.Parse()中获得。 .NET将只接受“897.83R”。您需要先从字符串中删除ZAR。 –

回答

3

也许你想这样的事情

Imports System 

Public Class Program 
    Private Shared Function GetCurrencyValue(input As String) As Double 
     Dim s As String = "" 
     For i As Integer = 0 To input.Length - 1 
      If Char.IsNumber(input(i)) OrElse input(i) = "."C OrElse input(i) = "-"C Then 
       s += input(i) 
      End If 
     Next 
     Return Double.Parse(s) 
    End Function 

Public Shared Sub Main() 
    Dim test1 As String = "ZAR897.83" 
    Dim test2 As String = "ZAR900.83" 

    Dim d1 As Double = GetCurrencyValue(test1) 
    Dim d2 As Double = GetCurrencyValue(test2) 

    Dim TotalPrice As Decimal = 0.00D 

    TotalPrice += CDec(d1) 
    TotalPrice += CDec(d2) 

    Console.WriteLine(TotalPrice) 
End Sub 
End Class 
+0

第3行中的“输入字符串格式不正确”。我也想确保它对任何货币都有效,因此无论如何substring都是个人问题。 – Nightwolf

+0

@Nightwolf然后检查我的编辑 –

+1

谢谢,我用你的代码和函数返回我需要的数字。它也给了一个错误,但我应该能够解决这个问题。 – Nightwolf

0

我认为这将有助于

To Call this function use Dim ListOfPrices As String() = {"ZAR897.83", "ZAR900.83"} Dim ReturnedPrice = ReturnVal(ListOfPrices)

Function ReturnVal(ListOfPrices As String()) 
    Dim TotalPriceInStringFormat As String = "" 
    Dim myStringVal As String = "" 
    Dim TotalPrice As Decimal = 0.0 
    Dim MyBool As Boolean = False 
    Dim count As Int16 = 0 
    For Each priceInStrFormat As String In ListOfPrices 
     TotalPriceInStringFormat = "" 
     For Each c As Char In priceInStrFormat 
      'If Char is Number or Period then append it 
      If (Char.IsNumber(c) Or c = ".") Then 
       TotalPriceInStringFormat += c 
      ElseIf (Char.IsLetter(c) And MyBool = False) Then ' Extract ZAR from "ZAR897.83" string only once 
       myStringVal += c 
       count = count + 1 
      End If 
     Next 
     If (count > 0) Then 'It already Extracted ZAR so assign MyBool to True 
      MyBool = True 
     End If 
     TotalPrice += Convert.ToDecimal(TotalPriceInStringFormat.ToString()) 
    Next 
    'If you want to return in this format ZAR900.83 Return TotalPriceWithString 
    Dim TotalPriceWithString As String = myStringVal + TotalPrice.ToString 
    'if you want return 900.83 then TotalPrice 
    TotalPrice = Convert.ToDecimal(TotalPriceInStringFormat) 

    Return TotalPrice 
End Function