【发布时间】:2018-04-30 05:27:18
【问题描述】:
我知道C# 有一些选项可以用ToString() 方法中的一些扩展逻辑来格式化十进制数,例如
double d1 = 1.3333;
double d2 = 1.6666;
string d1Str = d1.ToString("#0.00"); // 1.33
string d2Str = d2.ToString("#0.00"); // 1.67
太好了,我的数字四舍五入到小数点后第二位。但是如果我想四舍五入到0.05 而不是0.01 怎么办?有没有办法以类似的方式使用ToString() 方法将值舍入而不是给定步长(例如0.05)?
注意:我知道我可以这样做:
(Math.Round(1.33333*20)/20).ToString();
但问题在于仅使用 ToString() 获得此结果。
【问题讨论】:
-
ToString() 是关于将值格式化为字符串,而不是对它们执行计算。为什么要在 ToString() 中使用这个?不能创建扩展方法吗?
-
所以我从您的评论中猜想您的答案是“不可能”?我“想要”
ToString,因为我有组件允许我通过ToString方法格式化输出,仅此而已。 -
@CodeCaster
.ToString()已经能够对值进行舍入以进行显示。 OP 只是想以一种非正统的方式进行舍入。我没有看到 OP 在哪里尝试使用.ToString()进行计算。 -
来自docs.microsoft.com/en-us/dotnet/standard/base-types/… 我没有发现任何与现有格式类型有关的可能性。但是您可以覆盖
ToString方法并实现自定义格式,但是您还必须使用计算来舍入它而不是纯ToString解决方案
标签: c# rounding tostring displayformat