vb.net Math.Round 价格跌至最后 0?
vb.net Math.Round drops last 0 in price?
我在我的程序中使用了一个 Math.Round 函数,如下所示
Math.Round((ProductWeightByType * 4.18), 2)
这很完美,除非最后一个字符已经是 0 然后它会删除那个 0 所以示例 $1.70 变成 $1.7
我该如何解决这个问题?
你应该尝试使用 string format
,这样的东西可以满足你的需要:
String.Format("{0:C2}", Math.Round((ProductWeightByType * 4.18), 2))
处理金钱时,使用十进制。它不会像 Double 那样遇到精度问题。哦,不清楚你是不是用Decimal。好吧,您还不清楚您不使用字符串。数字中没有字符,而在字符串中。但这是一种使用正确类型的方法
Sub Main()
Dim ProductWeightByType As Decimal = 0.4056D
Dim cost As Decimal = 4.18D
Dim formattedCost As String = $"{cost:C2}"
Dim weightedCost As Decimal = ProductWeightByType * cost
Dim formattedWeightedCost As String = $"{weightedCost:C2}"
Console.WriteLine($"Cost: {cost}")
Console.WriteLine($"Formatted Cost: {formattedCost}")
Console.WriteLine($"Weight: {ProductWeightByType}")
Console.WriteLine($"Weighted Cost: {weightedCost}")
Console.WriteLine($"Formatted Weighted Cost: {formattedWeightedCost}")
Console.ReadLine()
End Sub
Cost: 4.18
Formatted Cost: .18
Weight: 0.4056
Weighted Cost: 1.695408
Formatted Weighted Cost: .70
实际上,您可能不应该在这里使用 Math.Round
来赚钱。如果您继续四舍五入并使用该值,您可能会开始累积几美分的损失或收益。当然,如果你想显示成本,那么就像其他答案一样格式化为货币(我的也是两次)。
请注意,重要的是要说明如果值为 .695408
那么它如何四舍五入为 .70
,获得 [=14=].004592
。保持您的成本为原始未损坏的数字格式,不进行四舍五入,仅使用 C2 格式仅用于显示。
我在我的程序中使用了一个 Math.Round 函数,如下所示
Math.Round((ProductWeightByType * 4.18), 2)
这很完美,除非最后一个字符已经是 0 然后它会删除那个 0 所以示例 $1.70 变成 $1.7
我该如何解决这个问题?
你应该尝试使用 string format
,这样的东西可以满足你的需要:
String.Format("{0:C2}", Math.Round((ProductWeightByType * 4.18), 2))
处理金钱时,使用十进制。它不会像 Double 那样遇到精度问题。哦,不清楚你是不是用Decimal。好吧,您还不清楚您不使用字符串。数字中没有字符,而在字符串中。但这是一种使用正确类型的方法
Sub Main()
Dim ProductWeightByType As Decimal = 0.4056D
Dim cost As Decimal = 4.18D
Dim formattedCost As String = $"{cost:C2}"
Dim weightedCost As Decimal = ProductWeightByType * cost
Dim formattedWeightedCost As String = $"{weightedCost:C2}"
Console.WriteLine($"Cost: {cost}")
Console.WriteLine($"Formatted Cost: {formattedCost}")
Console.WriteLine($"Weight: {ProductWeightByType}")
Console.WriteLine($"Weighted Cost: {weightedCost}")
Console.WriteLine($"Formatted Weighted Cost: {formattedWeightedCost}")
Console.ReadLine()
End Sub
Cost: 4.18
Formatted Cost: .18
Weight: 0.4056
Weighted Cost: 1.695408
Formatted Weighted Cost: .70
实际上,您可能不应该在这里使用 Math.Round
来赚钱。如果您继续四舍五入并使用该值,您可能会开始累积几美分的损失或收益。当然,如果你想显示成本,那么就像其他答案一样格式化为货币(我的也是两次)。
请注意,重要的是要说明如果值为 .695408
那么它如何四舍五入为 .70
,获得 [=14=].004592
。保持您的成本为原始未损坏的数字格式,不进行四舍五入,仅使用 C2 格式仅用于显示。