【发布时间】:2021-05-27 03:30:30
【问题描述】:
我希望将双精度数四舍五入到小数点右侧或左侧的任意数字。
Math.Round 仅适用于小数点右侧的数字,我需要能够四舍五入到最接近的 10s、100s、1000s...
所需输入/输出示例:
Round(1234.56789, 0) == 1235
Round(1234.56789, -3) == 1234.568
Round(1234.56789, 3) == 1000
这个问题不同于Round double in two decimal places in C#?
因为我需要将值四舍五入到小数点左侧的位置,例如1,2345,000四舍五入到最接近的10,000
【问题讨论】:
-
double 不能精确地表示具有有限十进制数字的数字,即使这些数字在最小值和最大值范围内,所以这不可能用
double解决。 -
如果您需要定点数类型,请考虑使用Decimal 类型。否则,您是否需要将其四舍五入以进行显示或计算?在完成计算之前对值进行四舍五入通常是错误的,所以我们可以推断这仅用于显示吗? (即:你想要一个字符串作为输出吗?)
-
@J... 在这种情况下,我在将
correction添加到读数后对值进行四舍五入,校正引入了我的团队计量想要四舍五入的过度精度。小数可能是更合适的类型,但我的值不小于1e-9且不大于1e+6 -
@Nifim 我再问一次 - 您是否在更正后四舍五入用于进一步计算?或者你是为了显示目的而在更正之后四舍五入(即:你想要一个字符串作为输出吗?)。老实说,我不确定“更正”如何增加“过度精度”。这听起来像是一个错误的概念。
-
@J... 是产生最终值,四舍五入后不再对值进行进一步计算,仅存储以备参考。一切都应我计量部门的要求。