This question already has answers here:
Integer vs String in database
(16个回答)
5年前关闭。
我有一个名为Person的类,它看起来像这样:
挪威出生的数字长11位,由on this Wikipedia page描述的算法构造而成。我看不到int,因为大多数出生数字都超过了
我听说,在决定应使用字符串还是整数存储数字值时,您应该问自己:是否需要对该值执行数学运算?
我正在
与
我要进行的数学运算是获得该人的性别(如果第9位为偶数,则为女性),并使用类似于ISBN算法的算法来验证出生人数。
使用String的另一个论点是,某些出生数字将以前导零开头,因此如果存储为长整数,则不是“11位数”。
首选的解决方案是什么?渴望进行数学运算,还是渴望使用String?
(16个回答)
5年前关闭。
我有一个名为Person的类,它看起来像这样:
public abstract class Person {
private String birthNo;
...
}
挪威出生的数字长11位,由on this Wikipedia page描述的算法构造而成。我看不到int,因为大多数出生数字都超过了
Integer.MAX_VALUE
。我听说,在决定应使用字符串还是整数存储数字值时,您应该问自己:是否需要对该值执行数学运算?
我正在
birthNo
上执行此操作,但是使用String的charAt(int i)
可以使很多操作变得更加容易。如果要存储较长的出生数字,则必须使用取模和除法来获得所需的数字:int ninth = Character.getNumericValue(birthNo.charAt(8));
与
int ninth = birthNo / 100 % 10
我要进行的数学运算是获得该人的性别(如果第9位为偶数,则为女性),并使用类似于ISBN算法的算法来验证出生人数。
使用String的另一个论点是,某些出生数字将以前导零开头,因此如果存储为长整数,则不是“11位数”。
首选的解决方案是什么?渴望进行数学运算,还是渴望使用String?
最佳答案
挪威的十一位数出生号码是在出生时或
在国家人口登记处登记。该寄存器是
由挪威税务局维护。它由日期组成
出生(DDMMYY),一个三位数的个人数字和两个校验数字。
我很想创建一个带有BirthNumber
的生日日期以及其他两个字段的LocalDate
或int
值的String
类,具体取决于您对它们的处理方式。这样,您可以解析构造函数中的出生编号,并使用实例方法获得所需的值。
根据以下评论,这是我如何包装出生日期:
import java.time.LocalDate;
public class DNumberLocalDate {
private final LocalDate localDate;
private final boolean isDNumber;
public DNumberLocalDate(LocalDate localDate, boolean isDNumber) {
this.localDate = localDate;
this.isDNumber = isDNumber;
}
public DNumberLocalDate(LocalDate localDate) {
this(localDate, false);
}
public int getDayOfMonth() {
return isDNumber ? localDate.getDayOfMonth() + 40 : localDate.getDayOfMonth();
}
}
09-27 03:26