我有「1/7」並希望得到十進制等值。當然我可以使用eval(「1/7」),但考慮eval是邪惡的,還有其他方法嗎?如何避免從字符串到十進制轉換的評估
回答
您可以編寫自己的函數,它不是非常複雜和相當有效:
function ParseFloat(sFloat) {
var parts = sFloat.split("/");
if (parts.length == 2) {
var first = parseInt(parts[0], 10);
var second = parseInt(parts[1], 10);
if (!isNaN(first) && !isNaN(second))
return first/second;
}
return NaN;
}
用法:
var s = "1/7";
alert(ParseFloat(s));
現場測試案例:http://jsfiddle.net/RK3zS/
編輯:如果你與這些實體的工作後,我會用「階級」這個例如:
function DecimalFraction(first, second) {
this.first = first;
this.second = second;
this.toString = function() {
return first/second;
}
}
然後:
var s = new DecimalFraction(3, 7);
alert(s);
更優雅在我看來。更新jsFiddle。
乾杯@robert選擇這個,看看我的編輯。 –
陰影 - 無需parseInt,除非將字符串轉換爲數字。同樣,使用返回這種微不足道的結果的構造函數是處理該問題的非常低效的方式。 – RobG
@Rob,但我想讓它更靈活,知道什麼時候失敗 - 現在我的示例也只是返回'NaN',但它也可以處理這樣的事情,並顯示一些消息。關於'toString()'它只定義了一次,並且看不出爲什麼效率低下,對不起。 –
的eval是不是罪惡。在沒有檢查輸入的情況下在任意字符串上使用它是唯一的惡意。
這是我們唯一的選擇,我猜。 Eval也不是那麼邪惡。否則創建自己的函數來識別值並進行計算。
假設你已經計算出小數,只有小數:
txt = "1/7";
firstNumber = txt.subString(0, txt.indexOf('/'));
secondNumber = txt.subString(txt.indexOf('/') + 1, txt.length);
decml = fistNumber/secondNumber;
嘗試這樣的。
var txt = "1/7";
var result = new Function("return " + txt)()
console.log(result); // 0.14285714285714285
非常像'eval',因爲它可以有效評估字符串。 –
- 1. 如何將十六進制字符串轉換爲十進制?
- 2. 將字符串轉換爲十六進制到十六進制
- 3. WPF C#字符串轉換爲十進制,十進制到字符串問題
- 4. Python如何評估精度到十進制列表的字符串?
- 5. 從十六進制字符串轉換爲十六進制字符數組
- 6. 十進制數字符串轉換爲十六進制的字符串
- 7. 如何避免評估GString
- 8. 轉換該字符串爲十進制
- 9. JAVA轉換十六進制字符串
- 10. 十六進制ASCII字符串轉換
- 11. PowerShell十六進制字符串轉換
- 12. 將字符串轉換爲十進制
- 13. 十進制字符串轉換問題
- 14. 如何避免異常「字符串中的無效十六進制字符」
- 15. 如何將十六進制字符串轉換爲十六進制字節?
- 16. 將字符串轉換爲十進制字符串並返回十進制
- 17. 字符串爲十六進制和十六進制轉換爲字符串
- 18. PHP將字符串轉換爲十六進制和十六進制字符串
- 19. Python從二進制字符串轉換爲十六進制
- 20. 從二進制轉換爲十六進制字符串
- 21. 從二進制字符串轉換爲十進制?
- 22. 從六進制十進制值轉換爲字符串
- 23. 轉換十六進制字符串十六進制值
- 24. 將十六進制字符串轉換爲十進制
- 25. 將字符串十進制轉換爲十六進制數
- 26. 十進制轉換爲十六進制字符串
- 27. C#字符串爲十六進制,十六進制到字節轉換
- 28. 十進制字符串到字符ASCII轉換 - C
- 29. 如何轉換二進制字符串值轉換爲十進制
- 30. 轉換十六進制字符串轉換爲十進制在C++
變種結果= 1/7; - 問題是什麼? – Bakudan
@Baku他希望結果是0.1428意思是分開這些數字。 –
使用* eval *確實沒有任何問題,這就是它的意思。 – RobG