當我嘗試「eval」函數作爲eval(「020 * 05 + 05」)時,它將返回85而不是105.有人可以解釋爲什麼eval函數的行爲如此嗎?還建議任何解決這個問題。返回八進制值的Javascript eval函數
回答
以零開頭的數字常量(如「020」)被解釋爲八進制數。對於C,C++,Java,Javascript和大多數任何其他語言來說都是如此,即使與C的關係模糊。
如果由於某種原因,您確實需要使用「eval()」,而且不過,我想你會發現周圍使用「的eval()」在所有的方式
var answer = eval(weirdString.replace(/\b0(\d+)\b/g, '$1'));
:得到與數字常量假前導零的這些奇怪的字符串,你可以嘗試這樣的事情。 (請注意下面的註釋,注意上面顯示的黑客將有包含小數部分的數字的問題。)
這適用於一個前導零,但它也消除了像「0.001」這樣的數字中的零,它變成了「0.01」。 – 2015-04-29 09:28:20
@ M.Boeckx好點!然而,我真正的希望是,沒有人真的有這個問題:) – Pointy 2015-04-29 13:17:57
我發現了另一個主題的答案,絕對好! http://stackoverflow.com/a/18082175/2164420 必須使用eval確實不太理想,所以這個解決方案就是我們這裏所需要的。它會自動刪除所有前導零。 – 2015-04-29 13:58:22
JavaScript將以0開頭的數字視爲八進制數。您可以刪除前導0或使用parseInt(yourNumber,10)將其轉換爲基數10.
下面是描述ParseInt函數如何在JavaScript中工作的鏈接,因此也是您得到意外結果的原因。
這很有用,但事情是如果他有那些帶有完整表達式的字符串,parseInt()本身幫助不大。這是其中的一種情況,我希望我們可以向後退步二三十步,並找出OP已經走入歧途的地方。 – Pointy 2010-03-26 14:07:37
「100 」 .replace(/ \ B0(\ d +)\ b/g的, '$ 1')= 「100。」,因此它危險溶液
我的解決方案:
function $calc(n, round, min, max) {
/// <summary>calculate expression from string</summary>
/// <param name="round" type="int">optional</param>
/// <param name="min" type="int">optional. minimum allowed value. if less return 0</param>
/// <param name="max" type="int">optional. maximum allowed value. if more return 0</param>
if (!n) return 0;
try {
n = Number(eval(n
.replace(/[^\d\.\-\+\*\/\(\)\e]/g, '')//remove illegal symbols
.replace(/^0+/, '')//replace first leading zero
.replace(/[^\d\.]+0+/g, function (s) {return s.substr(0, 1);}) //replace leading zero
));
} catch (e) { return 0; }
if (n == 0 || !isFinite(n)) return 0;
if (round != undefined) { var t = Math.pow(10, round); n = Math.round(n * t)/t; }
if (min != undefined && n < min) return 0;
if (max != undefined && n > max) return 0;
return n;
}
功能是安全的。如果計算失敗或NaN無限,則返回0
$calc('0100.08-(0.01+00.04)')=100.03
$calc('0/0')=0 //NaN
$calc('1/3',2)=0.33 //round
- 1. 從javascript eval()函數返回「字符串」
- 2. Python函數內返回eval值?
- 3. Eval返回值
- 4. 返回與十進制值的陣列中的JavaScript函數
- 5. JavaScript函數的返回值
- 6. Mysql的SUM函數返回返回錯誤的十進制值
- 7. Javascript(node.js)Math.floor返回長十進制值
- 8. 返回值爲JavaScript函數
- 9. JavaScript函數'返回'值?
- 10. JavaScript返回函數不值
- 11. 在八進制的JavaScript式的計算
- 12. JavaScript eval(「{}」)返回行爲?
- 13. Javascript中函數參數的返回值
- 14. 如何使用eval從函數返回?
- 15. 八進制值 - 在JDK8中?
- 16. JavaScript中返回函數的機制?
- 17. 範圍。$ eval()返回舊值
- 18. JavaScript函數不返回正確的值
- 19. Selenium webdriver的Javascript函數返回值
- 20. javascript中原型函數的返回值
- 21. 的JavaScript函數返回值範圍
- 22. javascript函數的返回值混淆
- 23. javascript中的函數返回值
- 24. 從內部函數返回值的JavaScript
- 25. Jquery替換Javascript函數的返回值
- 26. Javascript中的返回值其他函數
- 27. JavaScript中的嵌套函數返回值
- 28. 獲取函數的返回值在JavaScript
- 29. 的Javascript/jQuery函數返回值爲空
- 30. javascript函數返回函數
您在哪裏得到了eval字符串?如果你能控制它,你可以通過糾正數字格式來節省很多麻煩。 – lincolnk 2010-03-26 14:19:23