首页 >后端开发 >C++ >如何在 C# 中将双精度值截断而不是四舍五入到特定的小数位数?

如何在 C# 中将双精度值截断而不是四舍五入到特定的小数位数?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-27 12:15:111017浏览

How to Truncate, Not Round, Double Values to a Specific Number of Decimal Places in C#?

在 C# 中截断不进行舍入的双精度值

在 C# 中将双精度浮点数转换为字符串时,您可以遇到需要将其格式化为特定小数位数的情况。但是,使用 String.Format("{0:0.00}") 可能会导致舍入,这对于您想要精确截断的某些场景来说是不可取的。

要解决此问题,请结合使用 Math.Truncate () 和 NumberFormatInfo.CurrentInfo 实现不四舍五入的截断并保持文化敏感

解决方案:

  1. 使用 Math.Truncate() 截断 double 值:
double myDoubleValue = 50.947563;
double x = Math.Truncate(myDoubleValue * 100) / 100;

此操作将值乘以 100,截断以删除小数位,然后除以100 恢复原始比例。

  1. 使用 NumberFormatInfo.CurrentInfo 格式化截断的值:
string s = x.ToString("N2", NumberFormatInfo.CurrentInfo);

此格式说明符使用“N”格式字符串,其中包括带有尾随百分号的货币格式。 NumberFormatInfo.CurrentInfo 确保格式遵循当前区域性设置。

结果:

使用上述方法,您将获得精确的 double 值的字符串表示形式两位小数,不进行任何四舍五入。例如,值 50.947563 将被截断为 50.94,而不向上舍入为 50.95。

以上是如何在 C# 中将双精度值截断而不是四舍五入到特定的小数位数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn