首页 > 其他分享 >js 修约

js 修约

时间:2023-08-09 10:38:01浏览次数:34  
标签:10 param 修约 num toString len var js

/**
 * 修约精度
 * @param num 数值
 * @param len 精度(1、0.5、10、0.1、0.01)等
 * @returns 四舍五入
 */
export function ROUND5(num, len) {
  return $ROUND(num, len, '5')
}

/**
 * 修约精度
 * @param num 数值
 * @param len 精度(1、0.5、10、0.1、0.01)等
 * @returns 四舍六入
 */
export function ROUND6(num, len) {
  return $ROUND(num, len, '6')
}

/**
 * 修约精度
 * @param num{数值}
 * @param len{精度(1、0.5、10、0.1、0.01)等}
 * @param even{修约(四舍五入、四舍六入)}
 * @returns {number}
 */
export function $ROUND(num: string | number, len: string | undefined, even: { toString: () => string | string[] } | undefined) {
  try {
    if (isNaN(Number(num))) {
      return num
    }
    num = numDecimal(num, 10)
    num = Number(num)
    var d = (len || 0).toString().trim() || 0
    var rule = even != undefined && (even.toString().indexOf('5') != -1 || even.toString().indexOf('五') != -1) ? 5 : 6
    if (len == '0.5') {
      //TODO 精度为 0.5 时
      //(0.75 * 2).修约 / 2
      if (rule == 5) num = fiveRound(num * 2, 0) / 2 //四舍五入
      else num = sixRound(num * 2, 0) / 2 //四舍六入
      //小数位自动补 "0"
      num = numDecimal(num, 1)
    } else if (len == '0.2') {
      //TODO 精度为 0.2 时
      //(0.75 * 5).修约 / 5
      if (rule == 5) num = fiveRound(num * 5, 0) / 5 //四舍五入
      else num = sixRound(num * 5, 0) / 5 //四舍六入
      //小数位自动补 "0"
      num = numDecimal(num, 1)
    } else if (len == '5') {
      //TODO 精度为 ”5“ 时 ,个位只会是(0 | 5)
      //(0.75 * 0.2).修约 / 0.2
      if (rule == 5) num = fiveRound(num * 0.2, 0) / 0.2 //四舍五入
      else num = sixRound(num * 0.2, 0) / 0.2 //四舍六入
      //小数位自动补 "0"
      num = numDecimal(num, 0)
    } else if (len == '10') {
      //TODO 精度为 ”10“ 时
      //(0.75 / 10).修约 * 10
      if (rule == 5) num = fiveRound(num / 10, 0) * 10 //四舍五入
      else num = sixRound(num / 10, 0) * 10 //四舍六入
    } else {
      //小数点后有几位,就保留几位小数,例:0.1、0.01
      if (len != undefined && len.toString().split('.').length > 1) d = len.toString().split('.')[1].length
      else d = 0
      if (rule == 5) num = fiveRound(num, d)
      else num = sixRound(num, d)
      //小数位自动补 "0"
      num = numDecimal(num, d)
    }
  } catch (e) {
    console.log('修约错误:' + e)
  }
  return num
}

/**
 * 四舍五入
 * @param num {数值}
 * @param decimalPlaces{小数位}
 * @returns {number}
 */
export function fiveRound(num: number, decimalPlaces: number) {
  var d = decimalPlaces || 0
  return Math.round(num * Math.pow(10, d)) / Math.pow(10, d)
}

/**
 * 四舍六入
 * @param num {数值}
 * @param decimalPlaces{小数位}
 * @returns {number}
 */
export function sixRound(num: number, decimalPlaces: number) {
  var d = decimalPlaces || 0
  var m = Math.pow(10, d)
  var n = +(d ? num * m : num).toFixed(8)
  var i = Math.floor(n),
    f = n - i
  var e = 1e-8
  var r = f > 0.5 - e && f < 0.5 + e ? (i % 2 == 0 ? i : i + 1) : Math.round(n)
  return d ? r / m : r
}

/**
 * 小数位不够自动补 “0”
 * @param num {数值}
 * @param len {保留几位小数}
 */
var numDecimal = function (num, len) {
  num = (num || 0).toString().trim() || 0
  len = (len || 0).toString().trim() || 0
  if (len == '0') return num.toString().split('.')[0]
  if (num.toString().indexOf('.') == -1 && len != 0) {
    num = num + '.0'
  }
  var split = num.toString().split('.')
  var decimal = split[1].toString()
  num = split[0].toString()
  if (decimal.length > len) {
    decimal = decimal.substring(0, len)
  } else {
    while (decimal.length != len) {
      decimal += '0'
    }
  }
  return num + '.' + decimal
}

 

标签:10,param,修约,num,toString,len,var,js
From: https://www.cnblogs.com/huang2979127746/p/17616185.html

相关文章

  • 微信小程序支付V2版之JSAPI支付
    文章目录一、微信支付环境搭建1企业微信小程序的开通2.企业商户号的开通3小程序号与商户号关联二、微信小程序的支付流程1`JSAPI`支付流程2微信小程序获取`openid`3微信小程序下单4后台服务程序对订单的处理5微信小程序发起支付6支付结果的通知三......
  • 关于Tomcat返回URL出现jsessionId
    去掉java项目URL地址栏后面的";JEESESSIONID方法一:添加过滤器web.xml添加以下内容<filter><filter-name>jsessionid</filter-name><filter-class>com.myc.webpro.base.filter.DisableUrlSessionFilter</filter-class></filter><filter-......
  • js实现图片放大镜效果
    效果图代码实现过程html部分<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><htmlxmlns="http://www.w3.org/1999/xhtml"xml:lang="en"><head......
  • js实现打开web页面聚焦到窗口中间
    最近在做一个图片浏览器。效果如图:现在需要一进入到页面就聚焦到图片的位置,而不需要下滑后才能查看。使用方法如下:html中<imgid="originPic"src="${signedUrl}"/><scripttype="text/javascript">$(document).ready(function(){ window.location.hash="#originPic......
  • ❤ React03-JSX语法的使用
    ❤React03-JSX语法的使用3-1JSX基本使用JSX是React的核心JSX是ES的扩展jsx语法->普通的JavaScript代码->babelReact可以使用JSX的前提和原因:ReactJSX语法HTML语言直接写在JavaScript语言之中,不加任何引号,这就是JSX的语法,它允许HTML与JavaScript的混写var......
  • c#调用百度地图web服务api-----该方法可用在js跨域请求上
    百度地图Web服务API为开发者提供http接口,即开发者通过http形式发起检索请求,获取返回json或xml格式的检索数据。用户可以基于此开发JavaScript、C#、C++、Java等语言的地图应用。api官网说明链接:http://developer.baidu.com/map/webservice.htm可用接口列举:获取相关地址提示place......
  • java解析json
    {"status":0,"message":"ok","total":2,"results":[{"name":"蓝光COCO金沙","location":{"lat":30.68754......
  • java调用百度地图web服务api-----该方法可用在js跨域请求上
    百度地图Web服务API为开发者提供http接口,即开发者通过http形式发起检索请求,获取返回json或xml格式的检索数据。用户可以基于此开发JavaScript、C#、C++、Java等语言的地图应用。api官网说明链接:http://developer.baidu.com/map/webservice.htm可用接口列举:获取相关地址提示place......
  • JSP----jQuery插件ContextMenu生成右键菜单
    讲述三个内容:一:简介二:使用示例三:在jsp中动态生成的代码记录一:简介ContextMenu 译自:http://www.trendskitchens.co.nz/jquery/contextmenu/ ContextMenu是一个轻量级jQuery插件,用于选择性地用自己创建的菜单代替浏览器的默认右键菜单。 特点 1.可以在一个页面中使用多个右......
  • - 前后端数据传输的编码格式(contentType) - Ajax朝后端提交文件数据 - Ajax朝后端提
    前后端数据传输的编码格式(contentType)前后端数据传输的请求方式有两种:get、post我们只研究post请求的编码格式三种编码格式urlencodedform-datajson发送post请求的方式form表单Ajaxpostman(第三方工具,需要下载) form表单发送post请求的时候数据的编码格式请求头conten......