세금 계산은 여러 가지 이유로 드문 일입니다. 당신은 이미 세금 지구를 언급했습니다. 다른 이유는 다음과 같습니다.
- 제품 별 세금. 예를 들어 뉴저지는 의류에 세금을 부과하지 않았습니다.
- 세금 공휴일 주말. 학교 시작 바로 전에 매우 일반적입니다. 예를 들어
- 정책에 의해 경감됩니다. 고효율 기기의 공제와 비슷합니다.
따라서 패키지를 구입하여 통합하는 것이 좋습니다. 유지 보수 라이선스를 구입하면 매년 메타 데이터를 업데이트 할 수 있습니다.
프로그래밍 관점에서 세금 계산을 위해 나무와 같은 구조를 사용할 수 있습니다. 다음은 어떻게 설정하는지 알려주는 것입니다. 이 같은
첫째, 정의 일부 구조 :
public class AddedTaxes {
public void add(double amount, double description) { ... }
}
public interface TaxAdder extends Serializable {
void configure(Map<String, String> settings);
add(double preTax, AddedTaxes taxes, Object productDetails);
}
둘째, 가산기의 필요한 설정 구축 :
public class FixedRate implements TaxAdder {
private double _rate;
private String _description;
public void configure(Map<String, String> settings) {
_rate = Double.parseDouble(settings.get("rate%"))/100.0;
_description = settings.get("desc");
}
public add(double preTax, AddedTaxes taxes, Object productDetails) {
taxes.add(preTax * _rate, _description);
}
}
public class FixedProductSpecific implements TaxAdder {
private double _amount;
private String _product;
private String _description;
public void configure(Map<String, String> settings) {
_amount = Double.parseDouble(settings.get("amount"));
_product = settings.get("product");
_description = settings.get("desc");
}
public add(double preTax, AddedTaxes taxes, Object productDetails) {
if (_product.equals(productDetails)) {
taxes.add(_amount, _description);
}
}
}
셋째, 내가 하나 개 이상의 인간의 소비에 세금 규칙을 캡처하는 것을 파일 :
// zip code range <tab> adderClassName <tab> parameters
// general texas taxes
75000.0000-79999.9999 FixedRate rate%=8.25, desc=Sales tax
78700.0000-78999.9999 FixedProductSpecific amount=2.00 product=LeadAcidBattery desc=Lead acid battery sales
...
이 데이터는 데이터에 대한 '컴파일'단계를 거칠 수 있습니다. 예를 들어 10 가지 길이의 나무를 만듭니다. 각 노드 (리프뿐만 아니라)에는 TaxAdders 목록이 있습니다. 이 경우, 7/8/7
, 7/8/8
및 7/8/9
노드들만이 제 2 가산기를 가지며, 7/5
, 7/6
, '7/7', ...은 첫 번째 가산기를 가질 것이다.
일단 전체 구조가 조립되면 직렬화하십시오.이제 편집이 완료되었습니다. 런타임시 직렬화 된 계산 구조를로드하고 주어진 zip + 4에 대해 트리를 탐색하여 모든 (가능하면) 적용 가능한 계산기를 찾을 수 있습니다.
데이터를 유지 관리하지 않으려는 경우에도 내가 말하는 변환의 종류를 거치고 '컴파일 된'계산 구조를 만들 수 있습니다.
원하는 경우 세부 정보를 추가 할 수 있지만 관심있는 방향으로 진행될 때까지는 그 정보를 보류합니다.
정확히 300MB 인 파일은 무엇입니까? 주문에 대한 간단한 판매 세를 계산하려고하거나 복잡한 규칙을 탐색하고 있습니까? –
입력 한 주소에서 우편 번호 + 4를 확인하려고하십니까? – JustinKSU