【问题标题】:Round decimal values to two digits after the decimal point [duplicate]将小数值四舍五入到小数点后两位数[重复]
【发布时间】:2019-01-20 01:56:06
【问题描述】:

将浮点值四舍五入为两位小数的最佳方法是什么?

例如,我有float f1 = 123.9876
但我需要123.98

有没有注释可以做到这一点?

【问题讨论】:

  • 这取决于您要使用哪种类型的舍入机制?
  • 允许重复
  • 这可以通过常规 expr 实现吗?

标签: java types floating-point annotations data-annotations


【解决方案1】:

您可以使用 BigDecimal 类手动完成

float f=123.456778f;
BigDecimal decimalNo=new BigDecimal(f);
decimalNo=decimalNo.setScale(2,BigDecimal.ROUND_HALF_UP);

十进制编号 = 123.45

【讨论】:

  • 是的,它确实可以与 BigDecimal 一起使用。请注意,浮点类型(如 float 或 double)不一定会成功。对于 FP 值,通常不会对 value 进行四舍五入,而只是将其 output(即转换为字符串)使用多种方法中的一种来舍入输出。跨度>
  • FWIW,使用BigDecimal decimalNo = BigDecimal.valueOf(f); 代替new BigDecimal(f); 可能有意义。但见stackoverflow.com/questions/7186204/…
  • 1). 当任何人想要将值存储在数据库或文件中时,可能需要进行舍入。和 2)。是的,你是对的,valueOf() 在这里会更有意义。
  • 即使你存储在数据库或文件中,你仍然在四舍五入输出(好的,不仅仅是转换为字符串——任何合适的),而不是原始值。
  • 在 DB 双精度值以数字格式保存,而不是字符串。 (转成字符串很好,但需要时需要四舍五入为原始值,这两个选项都是根据情况而定的)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 2012-09-19
相关资源
最近更新 更多