舍入功能最接近1/4

Nay*_*ori 7 c# asp.net rounding

我们只想将用户输入的值自动舍入到最近的.25小时间隔.因此,用户可以输入1.55,并在保存到数据库时舍入到1.50.如果用户输入1.90将2.00保存到数据库.

Son*_*nül 7

你可以用Math.RoundMidpointRounding.AwayFromZero等;

double d = 1.55 * 4;
double i = Math.Round(d, MidpointRounding.AwayFromZero);
Console.WriteLine(i / 4);
Run Code Online (Sandbox Code Playgroud)

输出将是

1.5
Run Code Online (Sandbox Code Playgroud)

这里一个demonstration.

作为解释,乘以4,然后四舍五入给你正好是4次,你喜欢小数部分.00,.25,.50,.75.

将此双倍除以4,可以得到最接近的.25小时间隔.

这里有完整的示例代码;

double[] array = new[] { 1.0, 1.1, 1.2, 1.25, 1.3, 1.4, 1.5, 1.55, 1.6, 1.7, 1.75, 1.8, 1.9 };
foreach (double item in array)
{
    double d = item * 4;
    double i = Math.Round(d, MidpointRounding.AwayFromZero);
    Console.WriteLine(i / 4);
}
Run Code Online (Sandbox Code Playgroud)

输出将是;

1.0 gives you 1.0
1.1 gives you 1.0
1.2 gives you 1.25
1.25 gives you 1.25
1.3 gives you 1.25
1.4 gives you 1.5
1.5 gives you 1.5
1.55 gives you 1.5
1.6 gives you 1.5
1.7 gives you 1.75
1.75 gives you 1.75
1.8 gives you 1.75
1.9 gives you 2.0
Run Code Online (Sandbox Code Playgroud)

这里一个full demonstration.


que*_*atl 2

0.25是1/4,所以你可以很容易地得到它

double rounded = round(4.0 * hoursEntered) / 4.0
Run Code Online (Sandbox Code Playgroud)

round不存在。您必须使用适当的舍入函数和选项。对于 aspx.cs(C# 代码隐藏),请参阅System.Math.Round

此外,要将其链接到网页上的文本框,您将需要一些规则/验证器或文本更改处理程序或典型文本解析周围的任何地方。您也可以尝试在 JavaScript 客户端中执行此操作,*4/4 技巧保持不变,只是round函数名称不同。