2013-05-24 61 views
6

Tôi rất mới với JavaScript (tôi đến từ một nền Java) và tôi đang cố gắng thực hiện một số tính toán tài chính với một lượng nhỏ tiền.BigDecimal trong JavaScript

đi ban đầu của tôi lúc này là:

<script type="text/javascript"> 
    var normBase = ("[price]").replace("$", ""); 
    var salesBase = ("[saleprice]").replace("$", ""); 
    var base; 
    if (salesBase != 0) { 
     base = salesBase; 
    } else { 
     base = normBase; 
    } 
    var per5 = (base - (base * 0.05)); 
    var per7 = (base - (base * 0.07)); 
    var per10 = (base - (base * 0.10)); 
    var per15 = (base - (base * 0.15)); 
    document.write 
     (
     '5% Off: $' + (Math.ceil(per5 * 100)/100).toFixed(2) + '<br/>' + 
     '7% Off: $' + (Math.ceil(per7 * 100)/100).toFixed(2) + '<br/>' + 
     '10% Off: $' + (Math.ceil(per10 * 100)/100).toFixed(2) + '<br/>' + 
     '15% Off: $' + (Math.ceil(per15 * 100)/100).toFixed(2) + '<br/>' 
    ); 
</script> 

này làm việc tốt ngoại trừ nó luôn làm tròn lên (Math.ceil). Math.floor có cùng vấn đề và Math.round cũng không tốt cho nổi.

Trong Java, tôi đã tránh được việc sử dụng phao hoàn toàn từ khi di chuyển, tuy nhiên trong JavaScript có vẻ như không có sự bao gồm mặc định của một cái gì đó có thể so sánh được (OMG WHY!?!?!?!).

Vì vậy, tôi SO-fu đã dẫn tôi đến bài này: https://stackoverflow.com/questions/744099/is-there-a-good-javascript-bigdecimal-library

Vấn đề là, tất cả các thư viện nêu hoặc là bị hỏng hoặc cho một mục đích khác nhau. Thư viện jsfromhell.com/classes/bignumber rất gần với những gì tôi cần, tuy nhiên tôi đang gặp vấn đề kỳ lạ với cách làm tròn và chính xác của nó ... Dù tôi đặt Loại Tròn là gì đi chăng nữa, dường như nó cũng tự quyết định. Vì vậy, ví dụ, 3.7107 với độ chính xác của 2 và loại tròn của ROUND_HALF_UP bằng cách nào đó gió lên như 3,72 khi nó nên được 3,71.

Tôi cũng đã thử thư viện @JasonSmith BigDecimal (một cổng được gia công từ BigDecimal của Java), nhưng có vẻ như đối với node.js mà tôi không có tùy chọn chạy.

Làm thế nào tôi có thể thực hiện điều này bằng cách sử dụng JavaScript vani (và đáng tin cậy) hoặc thư viện hiện đại (đã đề cập ở trên là tất cả các năm cũ) mà tôi có thể sử dụng được duy trì và không bị hỏng?

+1

tôi chỉ có tôi "!?!?!?! OMG TẠI SAO" thời điểm hôm qua :) – rubiii

+0

Tôi có những khoảnh khắc OMG mỗi ngày trong JS về điều này. – user1567291

Trả lời

4

Tôi thích sử dụng accounting.js để biết số, tiền và định dạng tiền tệ.

Trang chủ - https://openexchangerates.github.io/accounting.js/

Github-https://github.com/openexchangerates/accounting.js

+0

+1 Điều này có vẻ đầy hứa hẹn! Cảm ơn bạn, tôi sẽ thử. – SnakeDoc

+1

Chúc bạn may mắn! Bạn không nên thất vọng. –

+0

Làm việc như một sự quyến rũ và chính xác như mong đợi! Cám ơn bạn một lần nữa. (Bây giờ chỉ cần nhận JavaScript để bao gồm một cái gì đó như thế này theo mặc định!) – SnakeDoc

Các vấn đề liên quan