AngularJS中如何将decimal值保留2位小数?
解决小数保留两位的问题:后端+前端双方案
嘿,我懂你碰到的麻烦了——用parseFloat(yourString).toFixed(2)没法把4.4589处理成4.45,核心原因大概率是接口返回的数字字符串用的是逗号作为小数点分隔符(毕竟土耳其的货币格式习惯用逗号),parseFloat不认这种格式,自然处理不对。下面给你两种靠谱的解决方案,按需选择:
方案一:后端直接处理(推荐,前端省心)
既然后端是你自己写的,直接在接口里把数字处理好再返回是最稳妥的。你需要把XML里读取到的字符串格式数字,转换成数值类型后保留两位小数,注意要适配土耳其的区域格式(逗号小数点)。
修改后的后端代码如下:
using System.Globalization; // 记得引用这个命名空间 [HttpGet] public ActionResult GetData() { XDocument doc = XDocument.Load("http://www.tcmb.gov.tr/kurlar/today.xml"); var turkishCulture = new CultureInfo("tr-TR"); // 土耳其区域格式,适配逗号小数点 var dox = doc.Descendants() .Where(r => r.Name == "Currency") .Select(r => new { Isim = r.Element("Isim").Value, Kod = r.Attribute("Kod").Value, // 解析字符串为decimal,再格式化为两位小数的字符串 AlisKur = Decimal.Parse(r.Element("BanknoteBuying").Value, turkishCulture).ToString("F2"), SatisKur = Decimal.Parse(r.Element("BanknoteSelling").Value, turkishCulture).ToString("F2") }) .Where(x => x.Isim == "ABD DOLARI" || x.Isim == "EURO"); return Json(dox, JsonRequestBehavior.AllowGet); }
这样接口返回的AlisKur和SatisKur直接就是保留两位小数的字符串(会自动四舍五入),前端拿到就能直接用,不用再处理格式问题。
方案二:前端修正处理(不想改后端时用)
如果暂时不想动后端代码,那前端处理的时候要先把逗号替换成点,再转成数值计算:
// 封装一个格式化函数 const formatCurrencyToTwoDecimals = (currencyStr) => { // 把逗号替换为点,避免parseFloat解析错误 const normalizedStr = currencyStr.replace(',', '.'); // 转成浮点数后保留两位小数 return parseFloat(normalizedStr).toFixed(2); }; // 假设接口返回的数据是response.data response.data.forEach(item => { item.AlisKur = formatCurrencyToTwoDecimals(item.AlisKur); item.SatisKur = formatCurrencyToTwoDecimals(item.SatisKur); });
之前你的方法失效,就是因为XML里的数字是4,4589这种格式,parseFloat遇到逗号就会停止解析,只得到4,所以toFixed(2)后变成4.00,替换逗号后就能正常解析了。
内容的提问来源于stack exchange,提问作者Arif YILMAZ
相关产品推荐
相关产品推荐

