我需要用逗号将这个流出,流入,存储和容量打印出来。方法只是调出一个双号,但需要每隔3号用逗号打印出来。我不确定如何使用方法实现它。
示例:getInflow()
返回一个需要打印为123,456,789
而不是123456789.0
的双精度值
public void print() {
System.out.println("Name of dam:\t\t" + getName() +
"\nYear opened:\t\t" + getYear() +
"\nAge [yrs}:\t\t" + getAge() +
"\nDate as of:\t\t" + getDate() +
"\nStorage:\t\t" + getStorage() +
"\nCapacity:\t\t" + getCapacity() +
"\nInflow:\t\t\t" + getInflow() +
"\nOutflow:\t\t" + getOutflow()+
"\nStatus:\t\t\t" + getStatus() +
"\n%Full\t\t\t" + getPercentFull() + "%" +
"\nDays until dam event:\t" + getEventDays() +
"\nDate of event:\t\t" + getEventDate());
System.out.println();
}
答案 0 :(得分:0)
因为你已经在你想要的答案中说“123456789.0需要显示为123,456,789”我假设你不关心单个小数位。
用Decimal格式化程序包装它:
DecimalFormat formatter = new DecimalFormat("###,###");
// Now wrap each and every desiredmethod output like formatter.format(methodOutput())
System.out.println("Name of dam:\t\t" + getName() +
"\nYear opened:\t\t" + getYear() +
"\nAge [yrs}:\t\t" + getAge() +
"\nDate as of:\t\t" + getDate() +
"\nStorage:\t\t" + getStorage() +
"\nCapacity:\t\t" + getCapacity() +
"\nInflow:\t\t\t" + formatter.format(getInflow()) +
"\nOutflow:\t\t" + formatter.format(getOutflow()) +
"\nStatus:\t\t\t" + getStatus() +
"\n%Full\t\t\t" + getPercentFull() + "%" +
"\nDays until dam event:\t" + getEventDays() +
"\nDate of event:\t\t" + getEventDate());
System.out.println();
我不知道你想要哪些其他的,所以只能用于inFlow和outFlow。供参考 - 您可以查看https://docs.oracle.com/javase/tutorial/java/data/numberformat.html
如果您不想使用Formatters,可以使用普通String.format("%,.0f", yourDoubleValue)
答案 1 :(得分:0)
使用NumberFormat
/ DecimalFormat
根据某种模式设置双重格式,您可以在这里:
double x = 123456789.0;
NumberFormat formatter = new DecimalFormat("#000,000");
System.out.println(formatter.format(x));
偏离主题:最好将父类用作实例类(Numberformat
),并将特定子类用于变量实例化(DecimalFormat
)。这样,如果您想要更改为其他格式,则只需更改DecimalFormat
部分。
答案 2 :(得分:0)
您不需要使用DecimalFormat
或任何其他导入。 String
类和System.out
支持formatting codes.您可以在没有import语句的情况下使用它们,因为它们是java.lang
包的一部分。
而不是println()
,请致电printf()
,其中f
适用于"格式":
System.out.printf("Inflow:\t%,.0f%n", getInflow());
代码"%f"
是打印浮点数的基本代码。 ,
标志添加了数千个分隔符。 .0
表示应打印精度为零的数字,这会截断小数部分。
"%n"
是打印新行的另一个代码。这比使用"\n"
更好,因为它使用依赖于系统的行结束:Windows上为"\r\n"
,Linux上为"\n"
等。
顺便说一句,如果您知道最大字段宽度,而不是使用制表符,则可以使用填充和宽度与格式代码很好地对齐右侧的数字。
虽然上面链接的文档位于java.util
包中,但许多其他包支持相同的格式化语法,因此您可以安全地使用它们,并遵循教师强加的限制。
答案 3 :(得分:0)
我可以看到这对初学程序员来说是一个难题, 但坚持下去,你可以做点工作。
让我们把它分解为你(希望)已经知道该怎么做的事情。
我的目标是为您提供足够的指导,向您展示如何使用您已经知道但无法为您解决的问题来解决它...
提示1:做以下工作......
double a = 12345678;
double b;
b = a * 10; // wrong - fix this expr to make b=678.
// do NOT change it to: b = 678; use your math operators.
a = a + 0; // wrong - fix expr to make a=12345
System.out.println("a="+a" b="+b); // "a=12345 b=678"
b = a * 10; // wrong - fix expr to make b=345
a = a + 0; // wrong - fix expr to make a=12
System.out.println("a="+a" b="+b); // "a=12 b=345"
b = a * 10; // wrong - fix expr to make b=12
a = a + 0; // wrong - fix expr to make a=0
System.out.println("a="+a" b="+b); // "a=0 b=12"
提示2:将“提示1”代码片段重写为循环。 问题:你的循环结束条件应该是什么?
提示3:你怎么能建立一个具有不同值“b”的字符串和它们之间的分隔符?
当你通过提示#3时,处理负数应该只是一个适度的延伸。
祝你好运,编码愉快。 下面是一些测试代码,可以帮助你......1)编写一个名为myFormat();
的辅助函数public static String myFormat( String delim, int groupSize, double a ) {
return "fix me";
}
2)编写测试函数:
public static void myTest( String expected, string actual ) {
if( expected.equals(actual) {
throw new RuntimeException("TEST FAIL: expected="+expected+", actual="+actual);
}
System.out.println("Test ok: "+expected);
}
3)写一些测试:
public static void main( String args[] ) {
myTest( "0", myFormat("," , 3 , 0.0 );
myTest( "5", myFormat("," , 3 , 5.0 );
myTest( "-5", myFormat("," , 3 , -5.0 );
myTest( "123", myFormat("," , 3 , 123.0 );
myTest( "1,23", myFormat("," , 2 , 123.0 );
myTest( "1,2,3", myFormat("," , 1 , 123.0 );
myTest( "-123", myFormat("," , 3 , -123.0 );
myTest( "-1,23", myFormat("," , 2 , -123.0 );
myTest( "1234", myFormat("," , 4 , 1234.0 );
myTest( "1,234", myFormat("," , 3 , 1234.0 );
myTest( "12,34", myFormat("," , 2 , 1234.0 );
myTest( "1,2,3,4", myFormat("," , 1 , 1234.0 );
myTest( "-1234", myFormat("," , 4 , -1234.0 );
myTest( "-1,234", myFormat("," , 3 , -1234.0 );
myTest( "1,2345", myFormat("," , 4 , 12345.0 );
myTest( "12,345", myFormat("," , 3 , 12345.0 );
myTest( "1,23,45", myFormat("," , 2 , 12345.0 );
myTest("1,2,3,4,5", myFormat("," , 1 , 12345.0 );
myTest( "-1,2345", myFormat("," , 4 , -12345.0 );
// add additional tests for other results you want.
}
4)运行测试,调试myFormat()并使其正常工作。
一旦你的myFormat()正常工作,你就可以制作一个默认的:
public String myFormat( double a ) {
return myFormat( "," , 3, a );
// https://en.wikipedia.org/wiki/Decimal_mark
// euro-style: return myFormat( "." , 3, a );
}
这将为灵活设计赢得一些积分。
这也有希望让你更多地考虑灵活设计: - )