如何在 C# / .NET 中强制最多 4 位小数而不四舍五入
How do I force max 4 decimals without rounding up in C# / .NET
示例变量:
var example1 = 1,12345638282382384;
var example2 = 12,12;
var example3 = 30,19999;
我想要的结果:
example1 = 1,1234;
example2 = 12,12; // 12,1200 would be better but isn't that important)
example3 = 30,1999;
这是什么问题?我有超过 4 个小数,但我只想看到 4 个小数。我在互联网上搜索,但我只看到四舍五入和完整数字的例子有一个逗号,而我的例子已经有了逗号。
此外,我是一名 student/junior 开发人员,至少在询问之前尝试四处搜索,希望有人知道答案。
Math.Round 允许您指定您想要的舍入行为,例如 Math.Round(example1,4,MidpointRounding.ToZero)
产生 1.1234
.
C# > var example1 = 1.12345638282382384;
C# > Math.Round(example1,4)
╭─✔──────────────────────────────────────────────────────────────╮
│ 1.1235 │
╰────────────────────────────────────────────────────────────────╯
C# > Math.Round(example1,4,MidpointRounding.ToZero)
╭─✔──────────────────────────────────────────────────────────────╮
│ 1.1234 │
╰────────────────────────────────────────────────────────────────╯
如果你非常想避免四舍五入,我会按照 user18387401 在他们的评论中建议的那样做,但也会使用一些字符串格式来始终显示 4 位小数(即使这 4 位小数是 0000
):
public static double TruncateDigits(double value, int places)
{
var integral = Math.Truncate(value);
var fraction = value - integral;
var multiplier = (double)Math.Pow(10, places);
var truncatedFraction = Math.Truncate(fraction * multiplier) / multiplier;
return integral + truncatedFraction;
}
// Usage
Console.WriteLine(string.Format("{0:N4}", TruncateDigits(example1, 4)));
Link to dotnetfiddle showing this off
如果您不介意总是向下舍入,我强烈建议您考虑四舍五入而不是这样做,因为四舍五入的作用与此相同。 展示了如何做到这一点
示例变量:
var example1 = 1,12345638282382384;
var example2 = 12,12;
var example3 = 30,19999;
我想要的结果:
example1 = 1,1234;
example2 = 12,12; // 12,1200 would be better but isn't that important)
example3 = 30,1999;
这是什么问题?我有超过 4 个小数,但我只想看到 4 个小数。我在互联网上搜索,但我只看到四舍五入和完整数字的例子有一个逗号,而我的例子已经有了逗号。
此外,我是一名 student/junior 开发人员,至少在询问之前尝试四处搜索,希望有人知道答案。
Math.Round 允许您指定您想要的舍入行为,例如 Math.Round(example1,4,MidpointRounding.ToZero)
产生 1.1234
.
C# > var example1 = 1.12345638282382384;
C# > Math.Round(example1,4)
╭─✔──────────────────────────────────────────────────────────────╮
│ 1.1235 │
╰────────────────────────────────────────────────────────────────╯
C# > Math.Round(example1,4,MidpointRounding.ToZero)
╭─✔──────────────────────────────────────────────────────────────╮
│ 1.1234 │
╰────────────────────────────────────────────────────────────────╯
如果你非常想避免四舍五入,我会按照 user18387401 在他们的评论中建议的那样做,但也会使用一些字符串格式来始终显示 4 位小数(即使这 4 位小数是 0000
):
public static double TruncateDigits(double value, int places)
{
var integral = Math.Truncate(value);
var fraction = value - integral;
var multiplier = (double)Math.Pow(10, places);
var truncatedFraction = Math.Truncate(fraction * multiplier) / multiplier;
return integral + truncatedFraction;
}
// Usage
Console.WriteLine(string.Format("{0:N4}", TruncateDigits(example1, 4)));
Link to dotnetfiddle showing this off
如果您不介意总是向下舍入,我强烈建议您考虑四舍五入而不是这样做,因为四舍五入的作用与此相同。