Tag: 舍入

在java中向上舍入到最接近的0.05的最佳方法

考虑到除食品外的所有商品均适用10%的税。 此外,import商品还需缴纳5%的附加税。 如果音乐CD的费用是12.49。 该项目的税金为1.499。 如果import香水瓶的成本为47.50,则该项目的税率为7.125 有一项政策规定,项目的税收应四舍五入至最接近的0.05。 因此,1.499应四舍五入为1.5,7.125应四舍五入为7.25。 使用逻辑可以实现上述舍入要求: (float) Math.ceil(taxAmount / 0.05f) * 0.05f; 将税收添加到项目的成本中会给出: 音乐CD:12.49 + 1.5 = 13.99import巧克力盒:47.50 + 7.25 = 54.65。 我面临以下输入的问题: 如果import巧克力盒的成本是11.85,则税率为0.5925 使用舍入政策,四舍五入后的税率为0.6。 当我们添加11.85 + 0.6这两个都是浮点数时,我们得到结果为12.450001。 与其他输入不同,此特定输入提供了大量小数位,而不是其他输出中的2位小数。 我尝试使用BigDecimal而不是float来存储所有值,并将比例设置为2位小数。 这种方法的问题是如果没有指定舍入策略,bigDecimal会在某些情况下抛出exception。 为BigDecimal提供舍入策略会导致项目的总成本和适用的税收使用提供给BigDecimal的舍入策略进行舍入,从而改变所需的输出。

java.math.RoundingMode是如何工作的?

我在舍入方面遇到了麻烦。 具体来说,在阅读完所有的javadoc后,我期待以下代码: int n = (integer between 0 and 9, included) new BigDecimal(n + 0.555d).setScale(2, RoundingMode.HALF_UP).doubleValue() 返回n + 0.56 。 相反,这些是n从0到4的返回值: new BigDecimal(0.555d).setScale(2, RoundingMode.HALF_UP).doubleValue() 0.56 new BigDecimal(1.555d).setScale(2, RoundingMode.HALF_UP).doubleValue() 1.55 new BigDecimal(2.555d).setScale(2, RoundingMode.HALF_UP).doubleValue() 2.56 new BigDecimal(3.555d).setScale(2, RoundingMode.HALF_UP).doubleValue() 3.56 new BigDecimal(4.555d).setScale(2, RoundingMode.HALF_UP).doubleValue() 4.55 我也尝试改变舍入模式: int n = (integer between 0 and 9, included) new BigDecimal(n + 0.555d).setScale(2, […]

在保持尾随零的同时舍入双倍

这是我的函数舍入一个最多两位小数的数字,但当四舍五入的数字是1.50时,它似乎忽略了尾随零并且只返回1.5 public static double roundOff(double number) { double accuracy = 20; number = number * accuracy; number = Math.ceil(number); number = number / accuracy; return number; } 因此,如果我发送1.499,则返回1.5,因为我想要1.50

Java中的双增量

可能重复: 如何在Java中以0.1f的增量在0.1f和1.0f之间进行迭代? 我的程序的一部分需要在while循环中使用值: 0.1 0.2 0.3 … 0.9 所以我需要在循环中提供它们。 这是代码: double x = 0.0; while ( x<=1 ) { // increment x by 0.1 for each iteration x += 0.1; } 我需要输出完全正确: 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 但它实际上给了我一些类似的东西: 0.1 0.2 0.300000000000000000000000004 0.4 0.5 0.6 0.79999999999999999999999999 0.89999999999999999999999999 0.99999999999999999999999999

如何使用可变精度的Java String.format?

我想根据用户输入改变字符串中双重表示的精度。 现在我正在尝试这样的事情: String foo = String.format(“%.*f\n”, precision, my_double); 但是我收到了java.util.UnknownFormatConversionException 。 我对这种方法的启发是C printf和这个资源 (1.3.1节)。 我在某处有一个简单的语法错误,Java支持这种情况,还是有更好的方法? 编辑: 我想我可以这样做: String foo = String.format(“%.” + precision + “f\n”, my_double); 但是我仍然对这种操作的原生支持感兴趣。

如何将double舍入到最接近的整数然后转换为float?

我使用java.util.Random生成随机高斯。 我需要将此高斯转换为浮点值。 然而高斯是一个双,所以我需要一些方法来圆或然后将其转换为浮点数。 我需要四舍五入到最近的整数,四舍五入。 这是我的问题:如何?

Android / Java:将数字四舍五入得到无小数

如何将十进制数舍入为整数。 3.50 => 4 4.5 => 5 3.4 => 3 你是如何用Java做到的? 谢谢!

Java8中的RoundingMode.HALF_DOWN问题

我使用的是jdk 1.8.0_45,我们的测试发现了一个错误。 当决定舍入的最后一个小数为5时,RoundingMode.HALF_DOWN与RoundingMode.HALF_UP的工作方式相同。 我发现了RoundingMode.HALF_UP的相关问题,但它们在更新40中得到修复。我还在oracle中添加了一个bug,但根据我的经验,它们确实没有响应。 package testjava8; import java.math.RoundingMode; import java.text.DecimalFormat; public class Formatori { public static void main(String[] args) { DecimalFormat format = new DecimalFormat(“#,##0.0000”); format.setRoundingMode(RoundingMode.HALF_DOWN); Double toFormat = 10.55555; System.out.println(“Round down”); System.out.println(format.format(toFormat)); format.setRoundingMode(RoundingMode.HALF_UP); toFormat = 10.55555; System.out.println(“Round up”); System.out.println(format.format(toFormat)); } } 实际结果:向下舍入10.5556向上舍入10.5556 预期结果(以jdk 1.7获得):向下舍入10.5555向上舍入10.5556

即使是双倍的一半

如果可能的话我需要舍入到最接近的0.5。 10.4999 = 10.5 这是快速代码: import java.text.DecimalFormat; import java.math.RoundingMode; public class DecimalFormat { public static void main(String[] args) { DecimalFormat dFormat = new DecimalFormat(“#.0”); dFormat.setRoundingMode(RoundingMode.HALF_EVEN); final double test = 10.4999; System.out.println(“Format: ” + dFormat.format(test)); } } 这不起作用,因为6.10000 …轮到6.1等…需要它舍入到6.0 感谢您的任何反馈。

高效BigDecimal向上和向下舍入到小数点后两位

在java中我试图找到一种有效的方法将BigDecimal舍入到两个小数,根据条件向上或向下。 IF condition true then: 12.390 —> 12.39 12.391 —> 12.40 12.395 —> 12.40 12.399 —> 12.40 If condition false then: 12.390 —> 12.39 12.391 —> 12.39 12.395 —> 12.39 12.399 —> 12.39 实现这一目标的最有效方法是什么?