我只是想通过做一个简单的总和来计算价格.例如:
float HourPay = 18.30
int MinutesWorked = 125
minutesWorked \ 60 * HourPay = 38,124999999
Run Code Online (Sandbox Code Playgroud)
我在C#函数中得到了这些值,并遇到了两个问题:
private decimal CalculatePrice(int minutes)
{
float test = minutes / 60 * setting.HourPay
return;
}
Run Code Online (Sandbox Code Playgroud)
问题是,test返回36.6这是不正确的,并四舍五入到小数点后1位.
我想要正确的答案,将其解析为小数并将其舍入为2位小数.
minutesWorked是一个整数,所以是60.所以minutesWorked / 60- > 125 / 60- > 2而不是你期望的那样(2.083333).
如果你只是改成它
float test = minutes / 60.0 * setting.HourPay;
Run Code Online (Sandbox Code Playgroud)
它应该像你期望的那样工作.
我应该补充一下,它让我有点畏缩,你正在使用浮动为HourPay.因为这基本上是金钱(技术上是$/hr)十进制可能是更好的选择,特别是因为你在这个过程中稍后移动到十进制(作为你的函数的结果)
问题是您开始时将两个整数相除,结果是另一个整数:
float test = minutes / 60;
Run Code Online (Sandbox Code Playgroud)
请注意testget's 2,因为如果将两个整数相除,所有小数都会被截断。所以计算实际上是正确的:
2 * 18.3 = 36.6
test应该是2.083...。解决方案是首先将整数转换为浮点数:
private decimal CalculatePrice(int minutes)
{
float test = (float)minutes / 60.0f * setting.HourPay;
return;
}
Run Code Online (Sandbox Code Playgroud)
那么你的除法不会忽略小数,结果将是你所期望的。您还可以省略 的显式转换minutes:
float test = minutes / 60.0f * setting.HourPay;
Run Code Online (Sandbox Code Playgroud)
只要常量 ( 60.0f) 被标记为浮点数,这就是有效的,因为除以浮点数的整数被隐式转换为整数。然而,第一种方法可能更容易阅读。
| 归档时间: |
|
| 查看次数: |
2121 次 |
| 最近记录: |