簡體   English   中英

Javascript中模數運算符不准確

[英]Modulo operator innaccuracy with large numbers in Javascript

我正在編寫一些代碼,將大整數從基於千的系統(例如1,234,567,891)轉換為日語的萬系統(例如120億3456萬7891)。 簡而言之,用日語將數字寫成可讀格式意味着將數字分成4組而不是3組。

用戶輸入一個數字(var innum ),模運算符與10,000的除數一起使用,以查明我希望用漢字(漢字)標記的數字的4位數據塊。

例如:其中chobase = 10 ^ 12(一萬億), okubase = 10 ^ 8(一億)和manbase = 10000(一萬),並說用戶輸入為54234238524003:

 var cho = Math.floor((innum/chobase)); //returns 54 var oku = Math.floor(((innum%chobase)/okubase)); //returns 2342 var man = Math.floor(((innum%okubase)/manbase)); //returns 3852 var sen = (innum%manbase); //returns 4003 

像拍弦一樣把它拍打起來... 54兆2342億3852萬4003
很棒-很棒。

但是,當整數切入十個四十進制數(10 ^ 16)時,模運算符將不再可靠。

使用與上述相同的邏輯由代碼產生的示例(為便於閱讀,添加了逗號):

輸入:4,234,322,423,423,424,003
輸出:423京4322兆4234億2342萬4000

這是不正確的,因為在輸入的情況下,日語格式的最后四位數字應為4003。

我意識到JavaScript數字是浮點數,並且隨着整數達到一定大小,精度會下降,因此,對於十個四分位數的數字,有何建議解決此問題? (這大約是我要轉換的最大大小數)。 我看到php有一個fmod()方法來處理這種情況,但我一直找不到對應的JavaScript。

我會考慮盡可能將它們保留為字符串 ,然后僅使用子字符串操作來操縱它們。 然后,您不必擔心它們是否適合數字數據類型。

通過示例,考慮以下腳本:

function makeNum(num) {
    num = num.replace(/,/g,"");
    var markers = "萬億兆京";
    var result = "";
    while (num.length > 4) {
        if (markers.length == 0) {
            result = "(未詳)" + num.substr(num.length-4) + result;
        } else {
            result = markers.substr(0, 1) + num.substr(num.length-4) + result;
            markers = markers.substr(1);
        }
        num = num.substr(0, num.length-4);
    }
    return num + result;
}

alert(makeNum("4,234,322,423,423,424,003"));

首先刪除所有逗號,然后使用markers選擇正確的分隔符,逐節構建日語數字。 如果您的電話號碼太大,以致標記用完了,我就改用(未詳) ,如果它的意思不是 “未知”,您可以將其歸咎於我使用的日英在線詞典。

如預期的那樣,該腳本的結果是一個對話框,其中包含423京4322兆4234億2342萬4003

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM