我怎样才能让它执行到小数点后两位,结果是长小数[重复]

Posted

技术标签:

【中文标题】我怎样才能让它执行到小数点后两位,结果是长小数[重复]【英文标题】:How can i get this to execute to two decimal places, comes out as long decimal [duplicate] 【发布时间】:2015-01-26 19:26:38 【问题描述】:
int ptstotal, ptsearned, ptssofar;
ptstotal= 1500;
ptsearned= 750;
ptssofar= 950;

System.out.println("The current percentage is "+(int)Math.round(ptsearned*1)/(double)(ptssofar)*100+"%.");

System.out.println("The current percentage is "+Math.round(ptsearned*1)/(double)ptssofar*100+"%.");

输出是长小数 78.96736805263% 只需要 78.97% 需要一些帮助

【问题讨论】:

使用 DecimalFormat 类。这个问题之前已经被问过很多次了。 ***.com/questions/17060285/… 【参考方案1】:

尝试使用 printf 代替

double value = (int)Math.round(ptsearned*1)/(double)(ptssofar)*100;
System.out.printf("The current percentage is %.2f %",value);

【讨论】:

谢谢!这也成功了!【参考方案2】:

没有必要将一个数字乘以 1,或者对一个您知道是整数的数量调用 Math.round。保持简单。

double percentage = (double)ptsearned / ptssofar * 100;
System.out.format("The current percentage is %.2f%%%n", percentage);

在这里,您需要(double) 来避免整数除法。然后,在格式字符串中,%.2f 表示以两位小数显示此值。下一个%% 转换为百分号,最后一个%n 转换为行分隔符。

【讨论】:

谢谢。这有帮助。我对 Java 还很陌生,所以我在尝试让它工作时就是这样。不知道如何让它发挥作用。【参考方案3】:

您可以将DecimalFormat 或formatted output 与printf(String, Object...) 一起使用

DecimalFormat df = new DecimalFormat("###.00");
System.out.println("The current percentage is "
        + df.format(Math.round(ptsearned * 1) / (double) (ptssofar)
                * 100) + "%.");
System.out.printf("The current percentage is %.2f%%.%n",
        Math.round(ptsearned * 1) / (double) ptssofar * 100);

哪些输出(请求的)

The current percentage is 78.95%.
The current percentage is 78.95%.

【讨论】:

非常感谢!这很完美! 我认为更好的格式化字符串是#.00。那样你总是会得到两位小数。

以上是关于我怎样才能让它执行到小数点后两位,结果是长小数[重复]的主要内容,如果未能解决你的问题,请参考以下文章

怎么把Excel小数点后面的数字精确到两位数!!!

java、怎样简便的保留小数点后两位。

怎样用MATLAB函数对一个无理数保留两位小数

问下sqlserver求平均数avg函数怎样保留小数位啊?

格式化结果以显示两位小数

Oracle数据库,在写SQL语句时,怎样将一个数精确到小数点后两位,并在前面补0,补齐规定的位数