Java 当我的实例变量只能是int时,如何使用printf()和mod操作获取十进制数

Java 当我的实例变量只能是int时,如何使用printf()和mod操作获取十进制数,java,modulus,integer-division,Java,Modulus,Integer Division,所以我错过了一些东西。我有一种方法,可以计算并返回股票投资组合的价值。但它使用的是一个混合数,它有一个美元部分和八分之一部分 public class StockPortfolio { //Instance Vars private String company; private int numOfShares; private int dollarSharePrice; private int eighthsSharePrice; public int portfo

所以我错过了一些东西。我有一种方法,可以计算并返回股票投资组合的价值。但它使用的是一个混合数,它有一个美元部分和八分之一部分

public class StockPortfolio
{
  //Instance Vars 
  private String company;
  private int numOfShares;
  private int dollarSharePrice;
  private int eighthsSharePrice;

  public int portfolioValue()
  {
   int portVal = (dollarSharePrice * numOfShares) 
                 + (eighthsSharePrice * numOfShares) / 8;

   System.out.printf("Opening portfolio value: $%.2f" , portVal);

   return portVal;
  }
对于测试类,
numOfShares
的值为
100
dollarSharePrice的值为
37
和第八份共享价格的
5

预期输出应如下所示:

期初投资组合价值:3762.50美元

我真正的麻烦是打印.50。我试过用不同的方法使用%但没有用。任何为我指明正确方向的帮助都将不胜感激。我在这里束手无策

float portVal = (float)9/4;
System.out.printf("Opening portfolio value: $%.2f" , portVal);
输出:

Opening portfolio value: $2.25

不要使用
portVal
打印。通过这样的操作直接打印

System.out.printf("Opening portfolio value: $%.2f", (float)((dollarSharePrice * numOfShares) + (eighthsSharePrice * numOfShares) / 8));

但是您将
portVal
声明为
int
…它应该声明为什么@alfasin修复计算,使
portVal
为376250。我敢打赌,在那之后,你一定能找到获得正确输出的方法。确保你最后一次除法。当你处理整数时,
(a*b)/c
a*(b/c)
@PeterLion-看看我的答案。@ajb我得到了
portVal
,得到了376250。但是我得到了一个
IllegalFormatConversionException
主题说“实例变量只能是int”;这也适用于方法中的局部变量吗?@ajb如果您只处理int,那么您不能期望打印一个分数,除非您以内联方式(在
printf
中)进行所有计算并转换为float…根据给出的说明,所有实例变量都必须是int。所以我假设局部变量可以是不同的类型。@PeterLion这很有意义。@alfasin是的,您可以让它显示正确的答案,而不使用任何
float
s。我只是不清楚这是否是一个不允许浮动作为局部变量的赋值。