java 格式化 浮点数_如何在javascript中格式化浮点数?
回答(13)
2 years ago
我猜的关键是首先正确地向上舍入,然后你可以将它转换为String .
function roundOf(n, p) {
const n1 = n * Math.pow(10, p + 1);
const n2 = Math.floor(n1 / 10);
if (n1 >= (n2 * 10 + 5)) {
return (n2 + 1) / Math.pow(10, p);
}
return n2 / Math.pow(10, p);
}
// All edge cases listed in this thread
roundOf(95.345, 2); // 95.35
roundOf(95.344, 2); // 95.34
roundOf(5.0364342423, 2); // 5.04
roundOf(0.595, 2); // 0.60
roundOf(0.335, 2); // 0.34
roundOf(0.345, 2); // 0.35
roundOf(551.175, 2); // 551.18
roundOf(0.3445434, 2); // 0.34
现在,您可以使用toFixed(p)安全地格式化此值 . 因此,根据您的具体情况:
roundOf(0.3445434, 2).toFixed(2); // 0.34
2 years ago
function trimNumber(num, len) {
const modulu_one = 1;
const start_numbers_float=2;
var int_part = Math.trunc(num);
var float_part = String(num % modulu_one);
float_part = float_part.slice(start_numbers_float, start_numbers_float+len);
return int_part+'.'+float_part;
}
2 years ago
/** don't spend 5 minutes, use my code **/
function prettyFloat(x,nbDec) {
if (!nbDec) nbDec = 100;
var a = Math.abs(x);
var e = Math.floor(a);
var d = Math.round((a-e)*nbDec); if (d == nbDec) { d=0; e++; }
var signStr = (x<0) ? "-" : " ";
var decStr = d.toString(); var tmp = 10; while(tmp
var eStr = e.toString();
return signStr+eStr+"."+decStr;
}
prettyFloat(0); // "0.00"
prettyFloat(-1); // "-1.00"
prettyFloat(-0.999); // "-1.00"
prettyFloat(0.5); // "0.50"
2 years ago
有圆形数字的功能 . 例如:
var x = 5.0364342423;
print(x.toFixed(2));
将打印5.04 .
2 years ago
var result = Math.round(original*100)/100;
The specifics,如果代码不能自我解释 .
编辑:...或者只使用 toFixed ,由Tim Büthe提议 . 忘了一个,谢谢(和一个upvote)提醒:)
2 years ago
还有一个需要注意的问题是 toFixed() 可以在数字末尾产生不必要的零 . 例如:
var x=(23-7.37)
x
15.629999999999999
x.toFixed(6)
"15.630000"
想法是使用 RegExp 清理输出:
function humanize(x){
return x.toFixed(6).replace(/\.?0*$/,'');
}
RegExp 匹配尾随零(以及可选的小数点)以确保它看起来也适合整数 .
humanize(23-7.37)
"15.63"
humanize(1200)
"1200"
humanize(1200.03)
"1200.03"
humanize(3/4)
"0.75"
humanize(4/3)
"1.333333"
2 years ago
var x = 0.3445434
x = Math.round (x*100) / 100 // this will make nice rounding
2 years ago
所有那些使用乘数浮动的解决方案都存在问题 . 不幸的是,kkyy和Christoph的解决方案都是错误的 .
请测试您的代码编号为 551.175 ,带有2位小数 - 它将舍入到 551.17 ,而它应该是 551.18 !但如果你测试前 . 451.175没关系 - 451.18 . 因此,乍一看很难发现这个错误 .
问题在于倍增:尝试551.175 * 100 = 55117.49999999999(ups!)
所以我的想法是在使用Math.round()之前用toFixed()对待它;
function roundFix(number, precision)
{
var multi = Math.pow(10, precision);
return Math.round( (number * multi).toFixed(precision + 1) ) / multi;
}
2 years ago
也许你还想要小数分隔符?这是我刚刚制作的一个功能:
function formatFloat(num,casasDec,sepDecimal,sepMilhar) {
if (num < 0)
{
num = -num;
sinal = -1;
} else
sinal = 1;
var resposta = "";
var part = "";
if (num != Math.floor(num)) // decimal values present
{
part = Math.round((num-Math.floor(num))*Math.pow(10,casasDec)).toString(); // transforms decimal part into integer (rounded)
while (part.length < casasDec)
part = '0'+part;
if (casasDec > 0)
{
resposta = sepDecimal+part;
num = Math.floor(num);
} else
num = Math.round(num);
} // end of decimal part
while (num > 0) // integer part
{
part = (num - Math.floor(num/1000)*1000).toString(); // part = three less significant digits
num = Math.floor(num/1000);
if (num > 0)
while (part.length < 3) // 123.023.123 if sepMilhar = '.'
part = '0'+part; // 023
resposta = part+resposta;
if (num > 0)
resposta = sepMilhar+resposta;
}
if (sinal < 0)
resposta = '-'+resposta;
return resposta;
}
2 years ago
使用_410963时要小心:
首先,使用数字的二进制表示来完成数字舍入,这可能会导致意外行为 . 例如
(0.595).toFixed(2) === '0.59'
而不是 '0.6' .
其次,有 toFixed() 的IE漏洞 . 在IE中(至少达到版本7,未检查IE8),以下情况属实:
(0.9).toFixed(0) === '0'
遵循kkyy的建议或使用自定义 toFixed() 函数可能是个好主意,例如
function toFixed(value, precision) {
var power = Math.pow(10, precision || 0);
return String(Math.round(value * power) / power);
}
2 years ago
使用乘法或除法,无法避免x.xx5作为实际值的价格不一致舍入 . 如果您需要在客户端计算正确的价格,您应该将所有金额保持在美分 . 这是由于JavaScript中数值的内部表示的性质 . 请注意,Excel遇到了同样的问题,因此大多数人都不会注意到这个现象引起的小错误 . 但是,无论何时添加大量计算值,错误都可能累积,有一个完整的理论涉及计算顺序和其他方法,以最小化最终结果中的错误 . 为了强调十进制值的问题,请注意在JavaScript中0.1 0.2并不完全等于0.3,而1 2等于3 .
2 years ago
我使用此代码来格式化浮点数 . 它基于 toPrecision() ,但它删除了不必要的零 . 我欢迎有关如何简化正则表达式的建议 .
function round(x, n) {
var exp = Math.pow(10, n);
return Math.floor(x*exp + 0.5)/exp;
}
用法示例:
function test(x, n, d) {
var rounded = rnd(x, d);
var result = rounded.toPrecision(n);
result = result.replace(/\.?0*$/, '');
result = result.replace(/\.?0*e/, 'e');
result = result.replace('e+', 'e');
return result;
}
document.write(test(1.2000e45, 3, 2) + '=' + '1.2e45' + '
');
document.write(test(1.2000e+45, 3, 2) + '=' + '1.2e45' + '
');
document.write(test(1.2340e45, 3, 2) + '=' + '1.23e45' + '
');
document.write(test(1.2350e45, 3, 2) + '=' + '1.24e45' + '
');
document.write(test(1.0000, 3, 2) + '=' + '1' + '
');
document.write(test(1.0100, 3, 2) + '=' + '1.01' + '
');
document.write(test(1.2340, 4, 2) + '=' + '1.23' + '
');
document.write(test(1.2350, 4, 2) + '=' + '1.24' + '
');
2 years ago
如果您不想使用舍入,可以尝试此操作
function myFunction() {
var str = 12.234556;
str = str.toString().split('.');
var res = str[1].slice(0, 2);
document.getElementById("demo").innerHTML = str[0]+'.'+res;
}
output:12.23
str.toString().split('.') 会将您的浮点数转换为字符串然后将其拆分为'.'
产生的变量将是一个带有两个字符串类型元素的数组,第一个元素将是12,第二个元素将是234556
str[1].slice(0, 2) 会将你的第二个(234556)字符串切成前两个字符,即23
然后通过 str[0]+'.'+res 连接第一个和结果字符串
希望这会有所帮助
java 格式化 浮点数_如何在javascript中格式化浮点数?相关推荐
- java+script+当前日期_如何在JavaScript中获取当前日期?
如何在JavaScript中获取当前日期? #1楼 您可以使用扩展了 Date对象的Date.js库,从而可以使用.today()方法. #2楼 如果您想对日期格式进行更多的粒度控制,我强烈建议您查看 ...
- golang 格式化字符串_如何在Go中格式化字符串
golang 格式化字符串 As strings are often made up of written text, there are many instances when we may wan ...
- regexp 好汉字符串_如何在JavaScript中使用RegExp确认字符串的结尾
regexp 好汉字符串 by Catherine Vassant (aka Codingk8) 由凯瑟琳·瓦森(Catherine Vassant)(又名Codingk8) 如何在JavaScrip ...
- javascript案例_如何在JavaScript中使用增强现实-一个案例研究
javascript案例 by Apurav Chauhan 通过Apurav Chauhan 如何在JavaScript中使用增强现实-一个案例研究 (How to use Augmented Re ...
- javascript编写_如何在JavaScript中使用解构来编写更简洁,功能更强大的代码
javascript编写 by Ashay Mandwarya ?️?? 由Ashay Mandwarya提供吗? 如何在JavaScript中使用解构来编写更简洁,功能更强大的代码 (How to ...
- java js 正则表达式_如何在JavaScript与Java中使用正则表达式
如何在JavaScript与Java中使用正则表达式 发布时间:2021-02-11 13:16:01 来源:亿速云 阅读:69 作者:Leah 如何在JavaScript与Java中使用正则表达式? ...
- javascript国际化_如何在JavaScript中实现国际化(i18n)
javascript国际化 朱利安· 莫茨 ( Julian Motz) , 帕纳约提斯· 维利萨拉科斯 ( Panayiotis Velisarakos) , 菲尔丹 ·史蒂芬 ( Vildan S ...
- 如何在 JavaScript 中格式化日期?
问: 如何将 Date 对象格式化为字符串? huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入.分类等筛选,希望这些产品与实践经验能给您带来灵感. 答1: HuntsBot周刊–不定时 ...
- java jcombobox长度_如何在JToolBar中设定JComboBox的大小?
如何在JToolBar中设定JComboBox的大小? 我设计了一个JToolBar,并且在上边添加了一个JComboBox,可是我发现这个JComboBox长度无法控制,它将JToolBar上剩余空 ...
最新文章
- 206. Reverse Linked List
- oracle添加语句 commit,Oracle COMMIT语句
- systemd 对你的进程数限制横插一脚啦
- linux 云主机 卡顿 排查过程
- Flow Problem
- python 从入门到实践 第三章
- 小学计算机室教室的简报,高新区第三小学开展“信息技术与教育教学融合创新发展”培训...
- 为元素绑定多个相同事件 绑定事件的另一种方式 复习 介绍 元素的事件绑定
- newcode wyh的吃鸡(优势队列+BFS)题解
- 魔兽怀旧网站模块下载_一个人的网站重新设计和怀旧
- 宣布EAXY:在Java中简化XML
- Altium Designer导入pcb原件之后都是绿的
- c语言数据的自动转换类型吗,c语言的自动类型转换
- OSChina 周二乱弹 —— 我国领先世界的IT技术
- 计算机网络实验报告3-tcp,计算机网络实验报告3 TCP
- git使用kdiff3合并乱码问题
- 计算机光驱启动设置,光驱启动怎么设置
- 人才引进--我搭上了顺风车
- 关联分析法,超详解!进来秒懂!!
- 我们为什么做Banana Pi开源硬件项目:
热门文章
- Unity 创建Sprite导致的内存溢出奔溃问题
- 面试官:说说Redis之I/O多路复用模型实现原理
- CSDN博客界面自定义之右侧博客栏目修改
- Web前端开发框架推荐
- ModuleNotFoundError: No module named ‘ale_py._ale_py‘
- 《白帽子讲Web安全》8-文件上传漏洞
- kali中steghide命令工具教程;7z命令详解;kali中base64命令详解
- 关于ckeditor富文本编辑器上传图片返回“不正确的服务器响应”的解决方案
- 静态路由的配置 简单实验图解
- 国民阅读经典:谈修养读后感