static final String dataFile = "invoicedata";
static final double[] prices = { 19.99, 9.99, 15.99, 3.99, 4.99 };
static final int[] units = { 12, 8, 13, 29, 50 };
static final String[] descs = { "Java T-shirt",
"Java Mug",
"Duke Juggling Dolls",
"Java Pin",
"Java Key Chain" };out = new DataOutputStream(new
BufferedOutputStream(new FileOutputStream(dataFile)));for (int i = 0; i < prices.length; i ++) {
out.writeDouble(prices[i]);
out.writeInt(units[i]);
out.writeUTF(descs[i]);
}//дата стрим кстати сам закрывает свой обвернутый поток
in = new DataInputStream(new
BufferedInputStream(new FileInputStream(dataFile)));
double price;
int unit;
String desc;
double total = 0.0;try {
while (true) {
price = in.readDouble();
unit = in.readInt();
desc = in.readUTF();
System.out.format("You ordered %d units of %s at $%.2f%n",
unit, desc, price);
total += unit * price;
}
} catch (EOFException e) {
}Когда работаешь с деньгами нельзя использовать числа с плавающими точками, у них проблемы точностью, когда переганяешь в байтовый поток.Для денег используется java.math.BigDecimal, но это не простой тип, это обьект, поэтому с ДатаСтримами он работать не может. Он работает с ObjectStreams.
Комментариев нет:
Отправить комментарий