[英]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 个小数。 我在 inte.net 上搜索,但我只看到四舍五入和完整数字得到逗号的示例,而我的示例已经有了逗号。
此外,我是一名学生/初级开发人员,至少在询问之前尝试四处搜索,希望有人知道答案。
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)));
如果您同意总是向下舍入,我强烈建议考虑舍入而不是这样做,因为舍入与此相同。 Panagiotis Kanavos 的回答说明了如何做到这一点
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.