js number format All In One

js number format All In One

金融数据表示法

千分位符号

// 1,000,000

大数分割表示法

Numeric separators (1_000_000_000_000)

image

http://caniuse.com/sr_es12

http://caniuse.com/mdn-javascript_grammar_numeric_separators

http://www.cnblogs.com/xgqfrms/p/16927831.html

// 1,000,000

const oneMillion = 1_000_000;
console.log(`oneMillion =`, oneMillion);
// oneMillion = 1000000

image

Number Format

const number = 123456.789;

console.log(new Intl.NumberFormat('de-DE', { style: 'currency', currency: 'EUR' }).format(number));
// Expected output: "123.456,79 €"

// The Japanese yen doesn't use a minor unit
console.log(new Intl.NumberFormat('ja-JP', { style: 'currency', currency: 'JPY' }).format(number));
// Expected output: "¥123,457"

// Limit to three significant digits
console.log(new Intl.NumberFormat('en-IN', { maximumSignificantDigits: 3 }).format(number));
// Expected output: "1,23,000"

const nf = new Intl.NumberFormat("en-US", {
  style: "currency",
  currency: "USD",
  maximumFractionDigits: 2,
  roundingIncrement: 5,
});

console.log(nf.format(11.29)); // "$11.30"
console.log(nf.format(11.25)); // "$11.25"
console.log(nf.format(11.22)); // "$11.20"

http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat

new Intl.NumberFormat()
new Intl.NumberFormat(locales)
new Intl.NumberFormat(locales, options)

Intl.NumberFormat()
Intl.NumberFormat(locales)
Intl.NumberFormat(locales, options)

http://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat

demos

const number = 123456.789;

// ✅
// const rmb = new Intl.NumberFormat('zh-Hans-CN', {
// ✅
// const rmb = new Intl.NumberFormat('zh-Hans', {
// ✅
const rmb = new Intl.NumberFormat('zh-CN', {
  style: 'currency',
  // currency: 'RMB', ❌
  currency: 'CNY',
}).format(number);

console.log(`RMB =`, rmb);
// Expected output: "¥123,457.789"

// RMB = ¥123,456.79 ❓❓❓

image

const number = 123456.789;

const rmb = new Intl.NumberFormat('zh-CN', {
  style: 'currency',
  currency: 'CNY',
  minimumFractionDigits: 3,
  maximumFractionDigits: 3,
  roundingIncrement: 5,
}).format(number);

console.log(`RMB =`, rmb);
// Expected output: "¥123,457.789"

// RMB = ¥123,456.790 ❓❓❓

const number = 123456.789;

const rmb = new Intl.NumberFormat('zh-CN', {
  style: 'currency',
  currency: 'CNY',
  minimumFractionDigits: 3,
  maximumFractionDigits: 3,
}).format(number);

console.log(`RMB =`, rmb);
// Expected output: "¥123,457.789"

// RMB = ¥123,456.789 ✅

image

(? 反爬虫测试!打击盗版⚠️)如果你看到这个信息, 说明这是一篇剽窃的文章,请访问 http://www.cnblogs.com/xgqfrms/ 查看原创文章!

locales

BCP 47 language tag

http://www.rfc-editor.org/info/bcp47

http://www.rfc-editor.org/rfc/inline-errata/rfc4646.html

zh-CN Chinese China Mainland China, simplified characters

http://www.techonthenet.com/js/language_tags.php

currency code

RMB

CNY

http://en.wikipedia.org/wiki/ISO_4217

image

refs



©xgqfrms 2012-2021

www.cnblogs.com/xgqfrms 发布文章使用:只允许注册用户才可以访问!

原创文章,版权所有©️xgqfrms, 禁止转载 ?️,侵权必究⚠️!


本文首发于博客园,作者:xgqfrms,原文链接:http://www.cnblogs.com/xgqfrms/p/17418051.html

未经授权禁止转载,违者必究!


本文转载于网络 如有侵权请联系删除

相关文章

  • Shell 基本运算符--字符串运算符

    下表列出了常用的字符串运算符,假定变量a为“abc”,变量b为“efg”:运算符说明举例=检测两个字符串是否相等,相等返回true。[$a=$b]返回false。!=检测两个字符串是否不相等,不相等返回true。[$a!=$b]返回true。-z检测字符串长度是否为0,为0返回true。[-z$a]返回false。-n检测字符串长度是否不为0,不为0返回true。[-n“$a”]返回true。$检测字符串是否为空,不为空返回true。[$a]返回true。字符串运算符实例如下:#!/bin/basha="abc"b="efg"if[$a=$b]thenecho"$a=$b:a等于b"elseecho"$a=$b:a不等于b"fiif[$a!=$b]thenecho"$a!=$b:a不等于b"elseecho"$a!=$b:a等于b"fiif[-z$a]thenecho"-z$a:字符串长度为0"elseecho"-z$a:字符串长度不为0

  • Spring Boot 中关于 %2e 的 Trick

    作者|Ruilin 分享一个SpringBoot中关于%2e的小Trick。先说结论,当SpringBoot版本在小于等于2.3.0.RELEASE的情况下,alwaysUseFullPath为默认值false,这会使得其获取ServletPath,所以在路由匹配时相当于会进行路径标准化包括对%2e解码以及处理跨目录,这可能导致身份验证绕过。而反过来由于高版本将alwaysUseFullPath自动配置成了true从而开启全路径,又可能导致一些安全问题。这里我们来通过一个例子看一下这个Trick,并分析它的原因。首先我们先来设置SprinBoot版本<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.3.0.RELEASE</version> <relativePath/><!--lookupparentfr

  • 如何编写一个PHP解释器文件

    什么是解释器概念解释器文件是一种文本文件,它第一行的形式为:#!pathname[optional-argument]在!和pathname之间的空格不是必要的,可以根据需求选择有无。pathname指的是绝对路径名,[optional-argument]指的是可选参数。PHP脚本执行程序在linux中,我们来执行php程序,一般是使用命令phpxxxx.php这样来执行,接下来我们编写这样一个程序运行一下,而下面这个图片则是在linux下运行php脚本的过程解释器文件上面介绍了解释器文件的概念以及书写形式,接下来咱们编写一个php解释器文件1、查找linux中,你安装的php可执行文件,如果是编译安装的相信大家都能找到,如果不是编译安装的,大家可以通过whereisphp这个命令来查看,我这里不是编译安装的,所以先查看一下本地的php可执行文件的路径因为不是编译安装的,所以大家看到查出来很多个,但正常的一般都安装在/usr/bin/php目录下2、编写可执行文件3、编写好可执行文件后,要查看编写文件的权限,如果没有可执行权限,要给可执行权限4、当给可执行的权限后,我们就可以执行这个文

  • 【SAP MM系列】SAP 采购订单的批量修改

    前言部分大家可以关注我的公众号,公众号里的排版更好,阅读更舒适。正文部分现在有一个需求,我们需要冻结一批采购订单,但是由于批量冻结的后果无法预知,我们打算用一个折中的办法。利用采购订单行项目中的“最近收货日期”字段,下面我们先看一下它的解释。最近可能的收货 这是收货(GR)的最近的可接受日期。如果在此日期后接收货物,将收到一个警告消息或一个错误消息,这取决于系统设置。 如果收到一个错误消息,将无法发送收货。 这里这个字段“MEPO1313-LEWED”可以给它一个日期值,设置为过去的一个日期,等到MIGO收货的时候会进行提示,至于想要怎么样的提示,警告or报错,取决于个人的配置。例如我们将“交货”页签下面的“最近收货日期”改为过去的一个日期,如下图所示。然后我们去进行收货,可以看到如下的提示。目的可以达到,那么我们就来撸一撸如何批量的进行操作。这个提到一个事务代码:MEMASSPO我们选择“字段”页签,利用放大镜找到字段"MASSEKPO-LEWED",选中它,执行。选择我们需要批量执行的订单范围,继续F8执行。若觉得条件选择不够多,可以按下图所示自行调整。执行。

  • 你重视了吗?CNC加工中心维护保养方法

    CNC设备的正确操作和维护保养能够防止机床非正常磨损,避免机床突发故障。对机床的精心维护保养,可以保持机床加工精度的长期稳定,延长机床使用寿命。这项工作必须从工厂的管理层面高度重视并执行!▌维护保养相关责任人1、操作人员负责设备的使用、维护及基本保养;2、设备维修人员负责设备的维修及必要的维护;3、车间管理人员负责对整个车间各操作员及设备维护等方面的监督。▌数控设备使用之基本要求1、数控设备要求要避免潮湿、粉尘过多和有腐蚀气体的场所;2、避免阳光的直接照射和其它热辐射,精密数控设备要远离振动大的设备,如冲床、锻压设备等;3、设备的运行温度要控制在15度至35度之间。精密加工温度要控制在20度左右,严格控制温度波动;4、为避免电源波动幅度大(大于正负10%)和可能的瞬间干扰信号等影响,数控设备一般采用专线供电(如从低压配电室分一路单独供数控机床使用),增设稳压装置等,都可减少供电质量的影响和电气干扰。▌日常加工精度维持1、开机后,必须先预热10分钟左右,然后再加工;长期不用的机器应延长预热的时间;2、检查油路是否畅通;3、关机前将工作台、鞍座置于机器中央位置(移动三轴行程至各轴行程中间位

  • Debian 系统中如何禁用 IPv6

    国内腾讯云和阿里云的机器是没有ipv6的,但安装完Debian9却发现默认启用了ipv6,所以需要将IPv6禁用,或者降低优先级。方法一:降低IPv6的优先级使IPv4优先默认的安装中,ipv4和ipv6并存,并且ipv6却优先于ipv4。如果不需要彻底关闭ipv6,可以设置让ipv4优先于ipv6。配置方式如下:echo"precedence::ffff:0:0/96100">>/etc/gai.conf复制当然也可以直接修改 /etc/gai.conf 文件,找到下面这一行#precedence::ffff:0:0/96100复制把前面的#去掉即可。方法二:设置GRUB启动参数禁用IPv6编辑 /etc/default/grub,找到 GRUB_CMDLINE_LINUX_DEFAULT="quiet"修改为:GRUB_CMDLINE_LINUX_DEFAULT="ipv6.disable=1quiet"复制随后执行命令 update-grub 更新grub启动参数,重启系统即可。分享到:×分享到微信朋友圈:打

  • Reddit热议:为什么PyTorch比TensorFlow更快?

    新智元报道来源:Reddit编辑:小芹【新智元导读】PyTorch可以和TensorFlow一样快,有时甚至比TensorFlow更快了?这是怎么回事?最近Reddit的一个帖子引起热议。近日,Reddit上有一个热帖:为什么PyTorch和TensorFlow一样快(有时甚至比TensorFlow更快)?作者说:由于这两个库都在底层使用cuDNN,所以我预想各个操作的速度是相似的。然而,TensorFlow(在graph模式下)编译一个graph,因此当你运行实际的训练循环时,在session.run调用之外没有任何Python开销。在PyTorch中,由于动态图的关系,需要经常使用Python,所以我预想这回增加一些开销。更不用说,拥有静态图意味着可以进行图优化,比如节点修剪和排序操作。但我在网上看到的许多基准测试中,在GPU上,PyTorch都可以轻松地赶上TensorFlow。一个具体的例子是,在PyTorch和TensorFlow两个库中的Adam实现:https://github.com/pytorch/pytorch/blob/master/torch/optim

  • 测试组,请用VSS命令行获取最新版本

    如果你是在MSVS上做开发,每日在集成开发环境中获取新版本编译,可能觉得挺方便的,可是对于测试部门来说,要每日手工获取最新版本,实在是一件无聊的容易让人疲倦的工作,有时候会把一个系统部署好几套,有时刚获取完,开发人员又更新了某处,不得不再重复,实在痛苦。最近项目组开发的统计系统分好几个版本,测试组部署了好几套连不同的库进行测试,每天让测试经理更新版本时我都于心不忍,手工打开vss登录,找到要获取的模块,获取完成再覆盖其它几套程序。于是,昨天下午我找了一些资料,看了看别人的经验,写了个批处理给测试部(测试部也需要会写程序的)。创建一个getlastversion101.bat,代码如下:setPATH=%PATH%;F:\VisualSourceSafe6d\VSS\Win32 setssdir=\\pmo\vss setssuser=user setsspwd=pwd ssWorkfold$/21-组工业务平台/BAPPortal/modules/statD:\党员干部统计合并程序\BAPPortal\modules\stat d: cdD:\党员干部统计合并程序\BAPPortal\

  • 基于注解式的分布式Elasticsearch的封装

    大家好,又见面了,我是你们的朋友全栈君。原生的RestLevelClient不好用,构建检索等很多重复操作。对bboss-elasticsearch进行了部分增强:通过注解配合实体类进行自动构建索引和自动刷入文档,复杂的业务检索需要自己在xml中写Dsl。用法与mybatis-plus如出一辙。依赖<dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> </dependency> <dependency> <groupId>com.bbossgroups.plugins</groupId> <artifactId>bboss-elasticsearch-spring-boot-starter</artifactId> <version>5.9.5</version> &

  • HBase原理深入

    HBase读写数据流程 Hbase读数据流程 首先从zk找到meta表的region位置,然后读取meta表中的数据,meta表中存储了用户表的region信息 根据要查询的namespace、表名和rowkey信息,找到写入数据对应的region信息 找到这个region对应的regionServer,然后发送请求 查找对应的region 先从Memstore查找数据,如果没有,再从BlockCache上读取。 Hbase上RegionServer的内存分为两部分: 一部分作为Memstore,主要用来写 另一部分作为BlockCache,主要用来读数据 如果BlockCache中也没有,再到StoreFile上进行读取。从StoreFile中读到数据后,不是直接把结果返回给客户端,而是先把数据写入BlockCache,然后再返回给客户端。 HBase写数据流程 首先从zk找到meta表的region位置,然后读取meta表中的数据,meta表中存储了用户表的region信息。 根据namespace、表名和rowkey等信息,找到写入数据对应的

  • 太上老君的炼丹炉之分布式 Quorum NWR

    分布式系列文章: 1.用三国杀讲分布式算法,舒适了吧? 2.用太极拳讲分布式理论,真舒服! 3.诸葛亮VS庞统,拿下Paxos共识算法 4.用动图讲解分布式Raft 5.韩信大招:一致性哈希 6.病毒入侵:全靠分布式Gossip协议 7.这三年被分布式坑惨了,曝光十大坑 8.太上老君的炼丹炉之分布式QuorumNWR 太白金星:听闻老君最近在练神丹妙药,可否与我一讲? 太上老君:老白啊,我最近在练六颗丹药:两颗延年丹、两颗健步丹、两颗恢复丹。 太白金星:那这三个八卦炉定是练这三件法宝的了? 太上老君:正是正是。而且对于相同的丹药,功效和大小还得完全一样。 一、三个炼丹炉怎么分配的 太白金星:老君,你的八卦炉怎么分配的啊? 让我们揭开老君的炼丹炉,看看六颗丹药是怎么分配的。 首先我们是很容易猜到丹炉是怎么分配炼丹的: 一号丹炉炼两颗延年丹。 二号丹炉炼两颗健步丹。 三号丹炉炼两颗恢复丹。 那如此分配会有什么问题呢? 我们试想一下,如果一号丹炉因为炉火太高炸裂了,那么两颗延年丹定会失败。这和把鸡蛋放到一个篮子里面是一个道理。假如篮子不慎被打翻,里面的鸡蛋都掉出来,就都碎了

  • 轻量级日志收集方案Loki

     先看看结果有多轻量吧 官方文档:https://grafana.com/docs/loki/latest/  简介 GrafanaLoki是一个日志聚合工具,它是功能齐全的日志堆栈的核心。 Loki是一个为有效保存日志数据而优化的数据存储。日志数据的高效索引将Loki与其他日志系统区分开来。与其他日志系统不同,Loki索引是根据标签构建的,原始日志消息未编入索引。 代理(也称为客户端)获取日志,将日志转换为流,然后通过HTTPAPI将流推送到Loki。Promtail代理专为Loki安装而设计,但许多其他代理与Loki无缝集成。 Loki特点 用于索引日志的高效内存使用 通过在一组标签上建立索引,索引可以明显小于其他日志聚合产品。更少的内存使得操作成本更低。 多租户 Loki允许多个租户使用单个Loki实例。不同租户的数据与其他租户完全隔离。通过在代理中分配租户ID来配置多租户。 LogQL,Loki的查询语言 Prometheus查询语言PromQL的用户会发现LogQL熟悉且灵活,可用于生成针对日志的查询。该语言还有助于从日志数据中生成指标,

  • kubenetes-控制器DaemonSet

    简介 DaemonSet 确保全部(或者一些)Node上运行一个Pod的副本。当有Node加入集群时,也会为他们新增一个Pod。当有Node从集群移除时,这些Pod也会被回收。删除DaemonSet将会删除它创建的所有Pod。 使用DaemonSet的一些典型用法: 运行集群存储daemon,例如在每个Node上运行 glusterd、ceph。 在每个Node上运行日志收集daemon,例如fluentd、logstash。 在每个Node上运行监控daemon,例如PrometheusNodeExporter、collectd、Datadog代理、NewRelic代理,或Ganglia gmond。 官网文档地址:https://kubernetes.io/docs/concepts/workloads/controllers/daemonset/   作者:闫世成 出处:http://cnblogs.com/yanshicheng 联系:yans121@sina.com 本文版权归作者和博客园共有,欢迎转载,但未经作者

  • Uncaught TypeError: $(...).attr(...) is undefined

    测试网页时,发现此标题异常:UncaughtTypeError:$(...).attr(...)isundefined 出现在下jQuery函数中:   经过一番检查,原来是动态产生的代码中,当遇上一些没有数据时,网页的html代码根本没有生成。因此,前端又想去获取此元素element的data-value值时,它会以不存在而产生异常。因此,Insus.NET使用2种方法来解决它。1,当没有数据时,产生一个空的html.   2,忽略以上方法1,在jQuery函数中,作个判断:    这个问题,说白了,就是判断元素element是否存在。Insus.NET把代码稍改一下,让其让人一看上去,它能适合id,class等。  

  • C++/Java中继承关系引发的调用关系详解

    C++: 这里引用到了 http://blog.csdn.net/haoel/article/details/1948051/ 中的内容,还请提前阅读陈大神的这篇博客后在阅读本篇。 覆盖,实现多态的基础,通过虚函数表来实现,下面这个例子便是覆盖Override  1#include<iostream> 2 3usingnamespacestd; 4 5classBase{ 6public: 7Base(){ 8cout<<"Base::Base"<<endl; 9} 10 11virtualvoidf(){ 12cout<<"Base::f"<<endl; 13} 14}; 15 16classDerived:publicBase{ 17public: 18Derived(){ 19cout<<"Devried::Derived"<<endl; 20} 21 22voidf(){ 23cout<<"Derived::f"<<endl; 24} 25

  • 杨氏矩阵

    在一个行和列都是依次递增的矩阵(这里是二维数组)中,如何设计一个时间复杂度为O(n)的算法,判断矩阵中是否存在元素x? intfind_x(vector<vector<int>>&m,intx){ //列数 intc=m[0].size()-1; //行数 intr=0; //遍历数据的个数--用来测试复杂度 intt=0; while(c<=m.size()-1&&r>=0){ if(x==m[r][c]) returnt; if(x>m[r][c]){ r++; t++; } if(x<m[r][c]){ c--; t++; } if(c<0||r>=m.size()) break; } return0; } 复制

  • 【Leetcode】34. 在排序数组中查找元素的第一个和最后一个位置 Medium

        本题并不困难,但是引发了我对二分查找算法的一些思考。 二分查找算法的实现思想有两种: 思路1:在循环体中查找元素   循环内部有三个分支: intsearch(vector<int>&nums,inttarget){ intleft=0,right=nums.size()-1; while(left<=right) { intmid=left+(right-left)/2; if(nums[mid]==target)returnmid; elseif(nums[mid]<target)left=mid+1; elseright=mid-1; } return-1; }复制 思路2:在循环体中排除目标元素一定不存在的区间 循环内部有两个分支: intsearch(vector<int>&nums,inttarget){ intleft=0,right=nums.size()-1; while(left<right) { intmid=left+(right-left)/2;

  • oracle 数据库的DML语句

    SQL:是结构查询语言 SQL的语句是由DQL(数据查询语言:SELECT),DML(数据管理语言:增、删、改),DDL(数据定义语言:例如创建表),DCL(数据库控制语言) 此片主要介绍如何写写DML。 向表中插入的数据 修改现存数据 删除现存数据 ``` //使用INSERT语句向表中插入数据的语法 INSERTINTOtable[(column[,column...])] VALUES(value[,value...]); //若使用上述语法只能向表中插入一条数据 复制 ###要想插入字符和日期数据应包含在单引号中。(其中需要注意的有:在插入日期的格式,要符合日期识别的要求。) ###如何向表中插入null值 复制 INSERTINTOdepartments(department_id,department_name) VALUES(30,'Purchasing') //这种方式是隐式向数据库中插入NULL,这种方式由数据库帮用户将内容插入到数据库中,用户只将一部分列名写出之后,没有写的列名由数据库默认的添加为null输入到数据库中去了。 复制 复制 INSERTINTO

  • Linux6.3升级zlib

    #!/bin/bash #脚本适用于Linux6.3升级zlib版本,rpm包应与脚本同级 SCRIPT_DIR=`readlink-f$0|xargsdirname` #目标版本 REQ_USER="root" REQ_PACKAGE="zlib-1.2.3-29.el6.x86_64.rpm" REQ_LINUX_V="6.3" REQ_ZLIB_V="zlib-1.2.3-27.el6.x86_64" TARGET_ZLIB_V="zlib-1.2.3-29.el6.x86_64" FLAG_USER=0 FLAG_PACKAGE=0 FLAG_LINUX_V=0 FLAG_ZLIB_V=0 #环境获取 CUR_USER=`whoami` #CUR_LINUX_V=`cat/etc/redhat-release|awk'{print$7}'` CUR_LINUX_V=`cat/etc/redhat-release|awk'{print$3}'` CUR_ZLIB_V=`rpm-qa|grepzlib` #前置条件检查 functioncheckENV(){ ##判断用

  • 【大数据课堂0001】结构化数据、半结构化数据和非结构化数据

    【总结】 数据 举例 特点 优点 缺点 使用场景 结构化数据 Excel,mysql 二维形式的数据 方便查询和修改 不易扩展 字段特征较固定 半结构化数据 XML,JSON,html 包含元数据信息 扩展性很好   易于归档 非结构化数据 word,txt,img,video 不规范的数据 格式多样   大量存储与共享   一、结构化数据 结构化的数据是指可以使用关系型数据库表示和存储,表现为二维形式的数据。一般特点是:数据以行为单位,一行数据表示一个实体的信息,每一行数据的属性是相同的。举一个例子: idnameagegender 1LiuYi20male 2ChenEr35female 3ZhangSan28male 复制 所以,结构化的数据的存储和排列是很有规律的,这对查询和修改等操作很有帮助。 但是,它的扩展性不好。比如,如果字段不固定,利用关系型数据库也是比较困难的,有人会说,需要的时候加个字段就可以了,这样的方法也不是不可以,但在实际运用中每次都进行反复的表结构变更是非常痛苦的,这也容易导致后台接口从数据库取数据出错。

  • Java方法_数组

    /* 方法:完成特定功能的代码块。   注意:在很多语言里面有函数的定义,而在Java中函数被称为方法。   方法格式: 修饰符返回值类型方法名(参数类型参数名1,参数类型参数名2...){ 方法体语句; return返回值; } 详细解释: 修饰符:目前就用publicstatic。后面我们再详细的讲解其他的修饰符。 返回值类型:就是功能结果的数据类型。 方法名:符合命名规则即可。方便我们的调用。 参数: 实际参数:就是实际参与运算的。 形式参数;就是方法定义上的,用于接收实际参数的。 参数类型:就是参数的数据类型 参数名:就是变量名 方法体语句:就是完成功能的代码。 return:结束方法的。 返回值:就是功能的结果,由return带给调用者。   要想写好一个方法,就必须明确两个东西: A:返回值类型 结果的数据类型 B:参数列表 你要传递几个参数,以及每个参数的数据类型   需求:求两个数据之和的案例   方法的执行特点: 不调用,不执行。   如何调用呢?(有明确返回值的调用) A:单独调用,一般来说没有意义,所以不

相关推荐

推荐阅读