【发布时间】:2020-09-17 05:25:58
【问题描述】:
我有一个场景,其中一些变量值具有十进制值,这些值可以具有前导 .0、.234、.124、.125、这样的数字等等。如果数字有前导小数和零,它应该忽略,如果一个数字有前导 3 个或更多数字,它应该四舍五入为 2。 假设代码如下:
var anone = "23"
var antwo = "23.0"
var anthree = "23.467"
var anfour = "23.125"
为了去除前导小数和零,我使用了以下方法:
var removingzero = antwo.Replace(".0", "");
// The result will be = 23
为了四舍五入并将数字限制为两位小数,我使用了以下方法:
var convertodecimal = Decimal.Parse(anthree);
var roundtotwo = Math.Round(convertodecimal, 2);
// The result will be = 23.47
同样为了转换最后一个我遵循相同的方法:
var convertodecimal = Decimal.Parse(anfour);
var roundtotwo = Math.Round(convertodecimal, 2);
// The result will be = 23.12
// But the Result should be = 23.13
所以,问题是当我尝试像最后一个示例那样对任何数字进行四舍五入时,它没有这样做,我该如何解决它。
【问题讨论】:
-
为什么要将 23.125 四舍五入到小数点后两位四舍五入到 23.13。您正在使用特定的舍入规则。该框架正在使用不同的框架(四舍五入)。您是否查看过 Math.Round docs.microsoft.com/en-us/dotnet/api/system.math.round 的文档?他们讨论这个。就像这样:docs.microsoft.com/en-us/dotnet/api/…
-
如果你好奇为什么四舍五入是好的,请取序列 1, 1.5, 2, ... 10.5 并取其平均值 (5.75)。现在使用从零开始的四舍五入(你的老师教你的)对每个值进行四舍五入,然后取平均值 (6)。但是,如果您使用四舍五入,则平均值为 5.75。您可以在 Excel 中执行此操作(但我相信那里的 ROUND 函数总是使用从零开始的舍入)
-
如果你有像
"23.04"这样的号码怎么办?在Replace(".0", "")行之后,它将是"234"。 -
我还没有遇到过这个问题,但是感谢您提出一些要记住的事情:)
-
你不会相信,我已经使用上述方法几个月了,没有任何问题,几天前你提到了这一点,今天我已经看到了你提到的价值,哈哈我该如何摆脱它?
标签: c# testing selenium-webdriver automation