回答(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中格式化浮点数?相关推荐

  1. java+script+当前日期_如何在JavaScript中获取当前日期?

    如何在JavaScript中获取当前日期? #1楼 您可以使用扩展了 Date对象的Date.js库,从而可以使用.today()方法. #2楼 如果您想对日期格式进行更多的粒度控制,我强烈建议您查看 ...

  2. golang 格式化字符串_如何在Go中格式化字符串

    golang 格式化字符串 As strings are often made up of written text, there are many instances when we may wan ...

  3. regexp 好汉字符串_如何在JavaScript中使用RegExp确认字符串的结尾

    regexp 好汉字符串 by Catherine Vassant (aka Codingk8) 由凯瑟琳·瓦森(Catherine Vassant)(又名Codingk8) 如何在JavaScrip ...

  4. javascript案例_如何在JavaScript中使用增强现实-一个案例研究

    javascript案例 by Apurav Chauhan 通过Apurav Chauhan 如何在JavaScript中使用增强现实-一个案例研究 (How to use Augmented Re ...

  5. javascript编写_如何在JavaScript中使用解构来编写更简洁,功能更强大的代码

    javascript编写 by Ashay Mandwarya ?️?? 由Ashay Mandwarya提供吗? 如何在JavaScript中使用解构来编写更简洁,功能更强大的代码 (How to ...

  6. java js 正则表达式_如何在JavaScript与Java中使用正则表达式

    如何在JavaScript与Java中使用正则表达式 发布时间:2021-02-11 13:16:01 来源:亿速云 阅读:69 作者:Leah 如何在JavaScript与Java中使用正则表达式? ...

  7. javascript国际化_如何在JavaScript中实现国际化(i18n)

    javascript国际化 朱利安· 莫茨 ( Julian Motz) , 帕纳约提斯· 维利萨拉科斯 ( Panayiotis Velisarakos) , 菲尔丹 ·史蒂芬 ( Vildan S ...

  8. 如何在 JavaScript 中格式化日期?

    问: 如何将 Date 对象格式化为字符串? huntsbot.com汇聚了国内外优秀的初创产品创意,可按收入.分类等筛选,希望这些产品与实践经验能给您带来灵感. 答1: HuntsBot周刊–不定时 ...

  9. java jcombobox长度_如何在JToolBar中设定JComboBox的大小?

    如何在JToolBar中设定JComboBox的大小? 我设计了一个JToolBar,并且在上边添加了一个JComboBox,可是我发现这个JComboBox长度无法控制,它将JToolBar上剩余空 ...

最新文章

  1. 206. Reverse Linked List
  2. oracle添加语句 commit,Oracle COMMIT语句
  3. systemd 对你的进程数限制横插一脚啦
  4. linux 云主机 卡顿 排查过程
  5. Flow Problem
  6. python 从入门到实践 第三章
  7. 小学计算机室教室的简报,高新区第三小学开展“信息技术与教育教学融合创新发展”培训...
  8. 为元素绑定多个相同事件 绑定事件的另一种方式 复习 介绍 元素的事件绑定
  9. newcode wyh的吃鸡(优势队列+BFS)题解
  10. 魔兽怀旧网站模块下载_一个人的网站重新设计和怀旧
  11. 宣布EAXY:在Java中简化XML
  12. Altium Designer导入pcb原件之后都是绿的
  13. c语言数据的自动转换类型吗,c语言的自动类型转换
  14. OSChina 周二乱弹 —— 我国领先世界的IT技术
  15. 计算机网络实验报告3-tcp,计算机网络实验报告3 TCP
  16. git使用kdiff3合并乱码问题
  17. 计算机光驱启动设置,光驱启动怎么设置
  18. 人才引进--我搭上了顺风车
  19. 关联分析法,超详解!进来秒懂!!
  20. 我们为什么做Banana Pi开源硬件项目:

热门文章

  1. Unity 创建Sprite导致的内存溢出奔溃问题
  2. 面试官:说说Redis之I/O多路复用模型实现原理
  3. CSDN博客界面自定义之右侧博客栏目修改
  4. Web前端开发框架推荐
  5. ModuleNotFoundError: No module named ‘ale_py._ale_py‘
  6. 《白帽子讲Web安全》8-文件上传漏洞
  7. kali中steghide命令工具教程;7z命令详解;kali中base64命令详解
  8. 关于ckeditor富文本编辑器上传图片返回“不正确的服务器响应”的解决方案
  9. 静态路由的配置 简单实验图解
  10. 国民阅读经典:谈修养读后感