Tag: 数字四舍五入

你能复制Java中Excel中的Floor函数吗?

我搜查了互联网,但没有find任何解决scheme,我的问题。 我希望能够使用相同/复制在Java中的Excel中find的FLOOR函数的types。 特别是我希望能够提供一个值(双倍或最好是BigDecimal),并向下舍入到我提供的重要性的最接近的倍数。 Examples 1: Value = 24,519.30235 Significance = 0.01 Returned Value = 24,519.30 Example 2: Value = 76.81485697 Significance = 1 Returned Value = 76 Example 3: Value = 12,457,854 Significance = 100 Returned Value = 12,457,800 我对Java很新,想知道是否有人知道API是否已经包含这个函数,或者他们是否会给我一个解决上述问题的方法。 我知道BigDecimal,但我可能错过了正确的function。 非常感谢

试图模仿Excel四舍五入引起我的悲痛

该值是2.01和2.52之和除以2 (2.01 + 2.52) / 2 。 Excel将此值显示为2.265,格式为2位时为2.27。 但是,存储在文件中的值是2.2649999999999997。 当我重新创build这是C#,我也得到了我的variables,而不是2.265的价值。 我明白这是由于4.53除以2的浮点精度问题。 double result = (2.01 + 2.52) / 2; Console.WriteLine(result); 控制台显示2.265,但QuickWatchdebugging器中显示的值显示为2.264999999999997。 我怀疑在WriteLine方法中将值转换为string正在纠正浮点精度错误。 当我申请Math.Round(result, 2, MidpointRounding.AwayFromZero) ,结果如我所预期的那样回到2.26而不是2.27 。 它看起来像在我想四舍五入的数字右边的第一个数字,看到它是一个4,忽略了它的权利的一切。 问题在于那些9只是因为精度问题而需要包含的,或者更好一些,值应该是2.265 。 我在我的代码中所做的是从Excel电子表格"2.2649999999999997"读取文本值,将其转换为双2.264999999999999 ,然后转换为string,从而得到"2.265" 。 然后,我将其转换回2.265以便我可以将Math.Round应用到它,并得到2.27的预期结果。 以下是完整的代码: double result = Convert.ToDouble(((2.01 + 2.52) / 2).ToString()); Console.WriteLine(Math.Round(result, 2, MidpointRounding.AwayFromZero)); 我的方法是浮点精度和舍入问题,依靠ToString来清理它,正确的? 如果不是,我该怎么做呢?

Excel十进制舍入?

我怎样才能在Excel中四舍五入一个数字,如格式化,以便实际的数字改变,而不只是它的单元格中的外观。 例如,如果我有一个单元格中的229.729599999998,并将单元格格式化为只显示4个小数位,则它现在将在单元格中显示229.7296,但单元格的值仍然是229.729599999998,所以如果我要进行任何计算,Excel将使用与十进制数4相反的较长的十进制数。 是否有办法我可以这样做,不仅在单元格中的数字的外观显示4个小数位,但单元格的实际值将反映4个十进制数,以便该单元格和公式栏中的值将显示229.7296而不是229.729599999998。 我知道我可以在相邻的单元格中使用函数或公式来圈选数字,但是我只是放在一个大的电子表格中,如果我必须对我的传播中的所有单元格做同样的事情,则需要很长时间片。 有任何想法吗?