Округление числа из API - VB. NET - CultureInfo - PullRequest
0 голосов
/ 21 марта 2020

В настоящее время я использую эту формулу для округления числа, получаемого из API


 Dim editedRatio As Decimal = Decimal.Round(Convert.ToDecimal(growth), 0)
 returnRatio = editedRatio.ToString("0,0,,", CultureInfo.CurrentCulture)
 returnRatio = "$" & returnRatio.Substring(0, returnRatio.Length - 2) & "B"

В результате получается $44,9B

Я пытаюсь получить обратно $44.9B

Я пытался отрегулировать значение до editedRatio.ToString("0.0,,"), но это приводит к нарушению формулы округления, например: 44954308000

Можно ли преобразовать запятую в десятичную точку?

Ответы [ 2 ]

1 голос
/ 21 марта 2020

Вы можете попробовать что-то вроде этого:

Так как похоже, что вы хотите вернуть отформатированное число , которое является результатом преобразования исходной входной строки в decimal представление, где начальное значение делится на (1000 ^ [thousands separators]).

На самом деле не ясно, является ли это ожидаемое значение, но деление:

editedRatio = Decimal.Divide(editedRatio, CDec(1000 ^ (growth.Length \ 3)))

можно изменить просто:

editedRatio = Decimal.Divide(editedRatio, (1000 ^ 3)

, если вместо этого ожидаемый результат. Или любое другое заданное c значение, определенное правилом преобразования .

Note1: десятичное число преобразуется в строку с использованием {N2}, поскольку {N1} вызывает округление
Note2: вы также можете использовать * Формат 1028 * и {C2} вместо CultureInfo.InvariantCulture и {N2} для вставки символа $. Но я не уверен, что $ на самом деле предназначен для представления валюты здесь.

С growth = "44954308000":

Dim editedRatio As Decimal = 0.0D
Dim returnRatio As StringBuilder = New StringBuilder()

If Decimal.TryParse(growth, editedRatio) Then
    editedRatio = Decimal.Divide(editedRatio, CDec(1000 ^ (growth.Length \ 3)))
    returnRatio.AppendFormat(CultureInfo.InvariantCulture, "${0:N2}", editedRatio)
    returnRatio.Remove(returnRatio.Length - 1, 1).Append("B")
End If

Console.WriteLine(returnRatio)

Отпечатки: $44.9B

0 голосов
/ 21 марта 2020
Private Sub my_method01()
    Dim returnratio As String = "44954308000"
    Dim editedRatio As Decimal = Decimal.Round(Convert.ToDecimal(returnratio), 0)
    returnratio = editedRatio.ToString("0,0,,", System.Globalization.CultureInfo.CurrentCulture)
    returnratio = "$" & returnratio.Substring(0, returnratio.Length - 2) & "B"
    'Displays: "$44.9B"
End Sub

Надеюсь, вам понравится. Большое спасибо. Удачной кодировки! :)

...