开发者社区> 问答> 正文

是否可以在不使用格式化的printf的情况下使用java进行精确转换?

这行导致双倍价值 3.33333333335

System.out.println("Average marks of " + name + " = " + (double)sum/3);

可以设置精度的宽度吗?

问题来源:Stack Overflow

展开
收起
montos 2020-03-27 13:18:16 1093 0
2 条回答
写回答
取消 提交回答
  • 不建议这么使用

    2020-03-30 21:15:36
    赞同 展开评论 打赏
  • 您可以使用DecimalFormat或BigDecimal如下:

    import java.math.BigDecimal;
    import java.math.RoundingMode;
    import java.text.DecimalFormat;
    
    public class Main {
        public static void main(String[] args) {
            int sum = 10;
            DecimalFormat decimalFormat = new DecimalFormat("#.##");
            System.out.println(Double.valueOf(decimalFormat.format((double) sum / 3)));
    
            // Another way
            System.out.println(new BigDecimal(String.valueOf((double) sum / 3)).setScale(2, RoundingMode.HALF_UP));
    
            // The better way using BigDecimal - thanks to @Andreas
            System.out.println(BigDecimal.valueOf(sum).divide(BigDecimal.valueOf(3), 2, RoundingMode.HALF_UP));
        }
    }
    

    输出:

    3.33
    3.33
    3.33
    

    回答来源:Stack Overflow

    2020-03-27 13:18:53
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载