这是我用来计算百分比并将其四舍五入到2位小数的代码。然而,目前,结果为45.0%而不是45.33%
int one = 432;
int rolls = 953;
double test1 = 100 * one / rolls;
double finalValue1 = Math.round( test1 * 100.0 ) / 100.0;
为什么没有显示小数位?
答案 0 :(得分:0)
您可以使用String.format(“%。2f”,test1)。如果你使用round,那么java将舍入整数值。因此,以这种方式格式化将为您提供所寻求的答案。
答案 1 :(得分:0)
当你乘以整数时,test1的结果是整数
所以你必须说
double test1= 100.0*one/rolls;
或
double test1=(double)100*one/rolls
答案 2 :(得分:0)
问题出在以下几行:
double test1 = 100 * one / rolls;
这是因为100
,one
和rolls
的类型为int
。
执行100 * one
时,会产生43200
。然后,我们必须执行剩余的计算... 43200 / 953
实际上等于45.330535152
,但因为它们都是int
类型,结果将是45
。制作test1 = 45
。由于测试一是双,因此它实际上是45.0
。
由于上述原因,使用test1
的下一次计算将被关闭,从而导致"无十进制值"。
要解决此问题,您可以将one
和rolls
的类型更改为加倍。
答案 3 :(得分:-2)
您有两个问题。
首先,您正在执行整数除法
double test1 = 100 * one / rolls;
100
,one
和rolls
都是int
。这意味着无论您声明返回类型是什么,结果都是整数。这个问题包含在问题Why the result of 1/3=0 in java?中:
结果变量为double只会导致在分割后发生隐式转换。
如果你想要double
s,请使用双打:
double one = 432.0;
double rolls = 953.0;
在确定之后,Math.round( test1 * 100.0 ) / 100.0;
的分区将产生double
,但可能有两个以上的精确位置。目前还不清楚如果你想进一步舍入到特定的精度,但如果你只想打印十进制后的两位数你可以使用:
System.out.printf("%.2f", finalValue1);