将“浮点数字符串”分割成整数和小数部分的最安全方法是>> [[

问题描述 投票:0回答:1
我开发了以下简短函数,用于将传递给它的数字

以字符串格式

拆分为其WholeFractional部分(也以字符串形式输出)。

注1:该数字的整个部分可能会变成大数(超过50个数字)。

] >>

注2:输出结果(Whole和Fraction字符串)将不会转换为整数或浮点数,但由于Java语言会舍入较大的数字,因此只能将其进一步处理为字符串。因此,返回数字不在此处]

因为该功能自动检测到机器的语言环境,所以期望

用户在其本地机器的语言环境中输入(传递)数字否则,该数字将以编程方式生成并传递给功能。

由于数字的长度很大,并且由于没有处理以指数(e)格式传递的数字,因此期望将数字作为“字符串”传递。

该函数使用toLocaleString()来检测小数点和千位分隔符。

到目前为止,我已经用主数系统(。,'空格)测试了功能,到目前为止很好。

问题是,

该代码的安全性如何

,是否还有其他更好,更安全的方法来进行更改或需要进行更正/更改?谢谢

function splitFloatString(NumString) { var decimalSeparator = (1.1).toLocaleString().substring(1,2); // Get Decimal Separator var thousandSeparator = (1000).toLocaleString().substring(1,2); // Get Thousands Separator NumString += ""; // ensure a string var fraction ="0"; // default no fractional part NumString = NumString.replace(RegExp("\\"+thousandSeparator,"g"),""); //remove thousand separators if any if (RegExp("\\"+decimalSeparator,"g").test(NumString)) { // test for decimal separator var n = NumString.split(decimalSeparator); // Split at Decimal Seprator NumString = n[0]; // The Whole part if (n.length==2) fraction = n[1]; // The Fractional part if (fraction=="") fraction ="0"; } console.log("Whole: ("+NumString+"), Fraction: ("+fraction+")"); // added for testing //return n=[NumString,fraction]; // normal return uncomment } //------------------------------------------------------------------------------------ // Tests assuming user's machine and user enters/passes US-EN separators as an example //------------------------------------------------------------------------------------ splitFloatString("123456789123456699999887788812340786.45678907656912574321115194123123456789"); splitFloatString("1,234,567,891,234,566,999,998,888,812,340.456520754186789075194123123456789"); splitFloatString("200") splitFloatString("0.") splitFloatString(123456.2349999) splitFloatString("") splitFloatString()
我开发了以下简短函数,用于将以字符串格式传递给它的数字分成整数和小数部分(也输出为字符串)。注1:数字的全部...
javascript floating-point numbers rounding
1个回答
0
投票
据我说,您只是使整个过程变得不必要了。这是获得相同结果的简单方法。

function getLocaleSeparators() { const testNumber = 1000.1.toLocaleString() return [testNumber.substring(1,2), testNumber.substring(5,6)] } function splitFloatString(number) { const numberString = number.toString() const [thousandSeparator, decimalSeparator] = getLocaleSeparators() const [wholePart, fractionPart] = numberString.replace(new RegExp(thousandSeparator, 'g'), '').split(decimalSeparator) console.log(`Whole: ${wholePart}, Fraction: ${fractionPart}`); }

© www.soinside.com 2019 - 2024. All rights reserved.