来自 API - VB.NET 的舍入数 - CultureInfo

Rounding number from API - VB.NET - CultureInfo

我目前正在使用此公式对从 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"

结果是,9B

我正在尝试返回 .9B

我试过将 调整为 editedRatio.ToString("0.0,,") 但它最终打破了舍入公式,例如:44954308000

有没有办法将逗号转换为小数点?

您可以尝试这样的操作:

因为看起来你想要 return 格式化的 数字 这是将原始输入字符串转换为 decimal 表示的结果,其中初始值除以 (1000 ^ [thousands separators])

实际上并不清楚这是否是预期值,但是除法:

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

可以简单修改为:

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

如果这是预期的输出。或 转换规则 定义的任何其他特定值。

Note1:使用 {N2} 将小数转换为字符串,因为 {N1} 会导致四舍五入
Note2:您也可以使用 new CultureInfo("en-Us"){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)

打印:.9B

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: ".9B"
End Sub

希望你喜欢。非常感谢你。编码快乐! :)