API-VB.NET-CultureInfo中的舍入数

API-VB.NET-CultureInfo中的舍入数,vb.net,rounding,Vb.net,Rounding,我目前正在使用这个公式对从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)

我目前正在使用这个公式对从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"
结果是$449b

我正试图拿回449亿美元

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
我曾尝试过将编辑器调整为
editedRatio.ToString(“0.0,,”)
,但最终打破了舍入公式,例如:44954308000


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

您可以尝试以下方法:

因为它看起来像是要返回一个格式化的数字,该数字是原始输入字符串转换为
十进制
表示的结果,其中初始值除以
(1000^[千位分隔符])

实际上还不清楚这是否是预期值,但划分:

editedRatio = Decimal.Divide(editedRatio, CDec(1000 ^ (growth.Length \ 3)))
可以简单地在以下位置进行修改:

editedRatio = Decimal.Divide(editedRatio, (1000 ^ 3)
如果这是预期的输出。或转换规则定义的任何其他特定值

Note1
:使用
{N2}
将十进制转换为字符串,因为
{N1}
导致四舍五入
Note2
:您也可以使用
新文化信息(“en-Us”)
{C2}
格式而不是
文化信息。不变量文化
{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)
打印:
449亿美元

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

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

输入是什么?为什么不使用正确的格式和
CultureInfo.InvariantCulture
?输入是44954308000,我使用的是项目中的现有代码。不确定cultureinfo的正确格式。如何将
44954308000
转换为
44.6
?如果您知道这个数字代表什么以及转换规则是什么,那么可能
44594308000
可以。你是在拿上千个分隔符左边和右边的东西吗?对不起,你是对的,因为我打错了。44954308000应该变成44.9