C#计算小数

Msm*_*993 0 c#

我只是想通过做一个简单的总和来计算价格.例如:

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位小数.

Tim*_*Tim 9

minutesWorked是一个整数,所以是60.所以minutesWorked / 60- > 125 / 60- > 2而不是你期望的那样(2.083333).

如果你只是改成它

float test = minutes / 60.0 * setting.HourPay;
Run Code Online (Sandbox Code Playgroud)

它应该像你期望的那样工作.

我应该补充一下,它让我有点畏缩,你正在使用浮动为HourPay.因为这基本上是金钱(技术上是$/hr)十进制可能是更好的选择,特别是因为你在这个过程中稍后移动到十进制(作为你的函数的结果)


Car*_*ten 5

问题是您开始时将两个整数相除,结果是另一个整数:

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) 被标记为浮点数,这就是有效的,因为除以浮点数的整数被隐式转换为整数。然而,第一种方法可能更容易阅读。