【问题标题】:Java: String FormattingJava:字符串格式化
【发布时间】:2014-03-31 23:46:53
【问题描述】:

正在尝试打印...

64506 St. Joseph, MO (+39.76580, +94.85060)

当前代码

public class PostalCodes {
private String city;
private double latitude;
private double longitude;
private double zip;
private String state;

public PostalCodes(double aZip, String aCity, String aState, double aLatitude, double aLongitude)
{
    city = aCity;
    latitude = aLatitude;
    longitude = aLongitude;
    zip = aZip;
    state = aState;
}

void setZip(double aZip)
{
    zip=aZip;
}

void setState(String aState)
{
    state=aState;
}


void setLocation(String aCity)
{
    city = aCity.trim();
}
void setLatitude(double lat)
{
    latitude = lat;
}
void setLongitude(double long1)
{
    longitude = long1;
}
public String getState()
{
    return state;
}
public double getZip()
{
    return zip;
}
public String getLocation()
{
    return city;
}
public double getLatitude()
{
    return latitude;
}
public double getLongitude()
{
return longitude;
}
public String toString()
{
    String result = String.format("%d %s,%s (%1.3f; %1.3f)",zip, city, state, latitude,longitude);
    return result;
}

}

我来了

Exception in thread "main" java.util.IllegalFormatConversionException: d != java.lang.Double
at java.util.Formatter$FormatSpecifier.failConversion(Unknown Source)
at java.util.Formatter$FormatSpecifier.printInteger(Unknown Source)
at java.util.Formatter$FormatSpecifier.print(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at java.util.Formatter.format(Unknown Source)
at java.lang.String.format(Unknown Source)
at PostalCodes.toString(PostalCodes.java:63)

作为一个错误。我完全按照我在课堂上的笔记做的,不知道我哪里错了。感谢您抽出宝贵的时间,如果可以的话,请帮我简化一下,这是第一次来这里的 Java 程序员。

【问题讨论】:

  • %d 用于整数值!而你的“邮编”是double...(为什么?这对于邮政编码来说很奇怪)
  • 按照 fge 所说的,我会避免使用数字字段(整数、浮点数、双精度)来存储邮政编码之类的东西。像电话号码一样,它们不是“数字”,而是碰巧是数字的字符集合(并且仅限于数字)。此外,为了争论,如果邮政编码需要前导零,您将失去数字字段。此外,文本存储还允许您存储混合字符代码,例如加拿大邮政编码等(假设)。

标签: java string class


【解决方案1】:

由于我的评论或多或少是一个答案,因此我将其发布在这里以便详细说明

正如其他人所说,您的问题是由于格式化程序令牌不正确。简而言之,%d 用于整数,%f 用于浮点数(包括双精度数)。

但是,我会避免使用数字字段(整数、浮点数、双精度)来存储邮政编码之类的内容。与电话号码一样,它们不是“数字”,而是碰巧是数字的字符集合(例如,在美国邮政编码的情况下,它们也恰好限于数字)。

此外,为了争论,如果邮政编码需要前导零,您将无法使用数字字段保留它。换句话说,将您的邮政编码存储为数字会使01234 显示为1234,这在涉及到诸如此类的标识值时并不完全相同。

此外,使用非数字存储(即文本)允许您存储混合字符代码,例如加拿大邮政编码(例如“K1Q 9S8”)等(假设)。我认为此要求与您的情况无关,但这种“面向未来”有时是一个值得养成的好习惯,尤其是考虑到我所描述的其他要点。

因此,实际上,我会将zip 变量的数据类型更改为String

private String zip;

并改用字符串格式化标记 (%s):

public String toString() {
    String result = String.format("%s %s,%s (%1.3f; %1.3f)",zip, city, state, latitude,longitude);
    return result;
}

【讨论】:

    【解决方案2】:

    %d 用于整数值。将 %f 用于浮点数和双精度数。

    【讨论】:

      【解决方案3】:

      邮政编码应该是整数。你为 zip 声明了一个 double。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-20
        • 2010-12-26
        • 1970-01-01
        • 1970-01-01
        • 2011-08-27
        • 1970-01-01
        • 2014-02-07
        • 2011-02-25
        相关资源
        最近更新 更多