考虑以下循环来打印图表: 假设数组中的所有元素以及兴趣都有指定的值,为什么for循环(System.out.format,确切地说)会产生IllegalFormatPrecisionException?
double[] sbalance;
double[] fbalance;
double[] interest;
sbalance = new double[months];
fbalance = new double[months];
interest = new double[months];
int deposit;
for (int q = 1; q <= months; q++)
{
System.out.format ("%18.2d%", sbalance[q-1]);
System.out.format ("%18.2d%", interest [q-1]);
System.out.format ("%18.2d%", (double)deposit);
System.out.format ("%18.2d%", fbalance [q-1]);
}
即使我返回并重新声明我的数组为Double []而不是double [],程序也会产生相同的错误(我发现java与autoboxing不一致)
非常感谢任何帮助。
答案 0 :(得分:0)
使用%f
代替%d
。
前者格式化浮点数;后者格式整数。要求打印带有2位小数的整数是没有意义的。
答案 1 :(得分:0)
格式中的d
表示十进制整数,而不是双精度。您应该使用f
。
答案 2 :(得分:0)
有两个问题。
import sys
from PyQt5.QtCore import QSize
from PyQt5.QtGui import QImage, QPalette, QBrush
from PyQt5.QtWidgets import *
class MainWindow(QWidget):
def __init__(self):
QWidget.__init__(self)
self.setGeometry(100,100,300,200)
oImage = QImage("test.png")
sImage = oImage.scaled(QSize(300,200)) # resize Image to widgets size
palette = QPalette()
palette.setBrush(10, QBrush(sImage)) # 10 = Windowrole
self.setPalette(palette)
self.label = QLabel('Test', self) # test, if it's really backgroundimage
self.label.setGeometry(50,50,200,50)
self.show()
if __name__ == "__main__":
app = QApplication(sys.argv)
oMainwindow = MainWindow()
sys.exit(app.exec_())
应为%18.2d
。%18.2f
应为%
。 (在cron文件中,%
表示换行符,但在Java中,%
表示换行符。)这是工作代码:
%n
如果您希望在编译时收到IllegalFormatPrecision错误警告而不是遇到运行时崩溃,则可以使用Format String Checker的Checker Framework。如果您已安装并运行
public class Interest {
public static void main(String[] args) {
int months = 12;
int deposit = 1000;
double[] sbalance;
double[] fbalance;
double[] interest;
sbalance = new double[months];
fbalance = new double[months];
interest = new double[months];
for (int q = 1; q <= months; q++) {
System.out.format ("Month %d%n", q);
System.out.format ("%18.2f%n", sbalance[q-1]);
System.out.format ("%18.2f%n", interest [q-1]);
System.out.format ("%18.2f%n", (double)deposit);
System.out.format ("%18.2f%n", fbalance [q-1]);
}
}
}
然后编译器会警告您有关特定错误消息的问题。