繁体   English   中英

如何在 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 个小数。 我在 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)));

链接到 do.netfiddle 展示这个

如果您同意总是向下舍入,我强烈建议考虑舍入而不是这样做,因为舍入与此相同。 Panagiotis Kanavos 的回答说明了如何做到这一点

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM