为什么 toPrecision 返回一个字符串?

2023-11-29

查看这段代码:

function testprecision(){
    var isNotNumber = parseFloat('1.3').toPrecision(6);
    alert(typeof isNotNumber); //=> string
}

我本来预计会有一个数字。如果 'isNotNumber' 应该是实数,则解决方案是重铸:

alert(typeof parseFloat(isNotNumber)) //=> number

[编辑] 感谢您的回答。我的结论是,精确度这个词并不那么精确。它可以代表总位数一个数字,或小数位数。大多数荷兰人(我来自荷兰)认为精度是“小数位数”的方式。 javascript toPrecision 方法涉及第一个表示,因此这很令人困惑。不管怎样,该方法有可能引入“错误精度”,对吗?对于第二个含义,我们必须修复,同样如此(返回字符串,错误精度的可能性)。

不管怎样,在把重新发明轮子作为我的主要爱好之后,我尝试使用我在这里收集的知识来构造一个 JavaScript 浮动对象。也许这对外面的人有用,或者你们中的一个人有更好的想法?

function Float(f,nDec) {
  var Base = this,val;
  setPrecision( nDec || 2 );      
  set( f || 0, nDec || Base.precision );
  Base.set    = set;
  Base.ndec   = setPrecision;
  /** public setprecision 
   *  sets a value for the number of fractional
   *  digits (decimals) you would like getf to 
   *  return. NB: can't be more than 20.
   *  Returns the Float object, so allows method 
   *  chaining
   *  @param {Number} iPrecision
   */
  function setPrecision(iPrecision) {
      var ix = parseInt(iPrecision,10) || 2;
       Base.precision = ix >= 21 ? 20 : ix;
       return Base;
  }
  /** public set
   *  sets the 'internal' value of the object. Returns
   *  the Float object, so allows method chaining
   *  @param {Number} f
   *  @param {Number} ndec
   */
  function set(f,ndec) {
       val =  parseFloat(f) || 0;
       if (ndec) { setPrecision(ndec); }
       Base.val = val;
       return Base;
  }
  /** public get: 
   * return number value (as a float)
   */
  Base.get = function(){
      var ndec = Math.pow(10,Base.precision),
          ival = parseInt(val*ndec,10)/ndec;
      Base.val = ival;
      return Base.val;
  };
  /** public getf 
   *  returns formatted string with precision
   *  (see Base.setPrecision)
   *  if [hx] is supplied, it returns
   *  the float as hexadecimal, otherwise
   *  @param {Boolean} hx
   */
  Base.getf = function(hx){
      var v = Base.val.toFixed(Base.precision);
      return hx ? v.toString(16) : v;
  };
  /** public add
   * adds [f] to the current value (if [f] is a
   * Float, otherwise returns current value)
   * optionally sets a new number of decimals
   * from parameter [ndec]
   * @param {Number} f
   * @param {Number} ndec
   */
  Base.add = function(f,ndec){
      if ( parseFloat(f) || val===0) {
           set(Base.val+parseFloat(f));
           if (ndec) { setPrecision(ndec);}
      }
     return Base.get();
  };
  /** toString 
   *  returns the internal value of the Float object
   *  functions like a getter (supposedly)
   */
  Base.toString = Base.get;
}

用法/示例:

var xf = new Float(); //=> value now 0.0
xf.set(0.86/0.8765,17).add(3.459);
alert(xf+'|'+xf.getf()); //=> 4.440175128351398|4.44017512835139800

从文档中:“返回表示 Number 对象的指定精度的字符串。”

toPrecision() 似乎旨在格式化输出,在这种情况下,字符串是最合理的结果。它以不会被进一步操作破坏的形式表示最终输出。

如果您出于计算原因想要对精度进行一些截断,我倾向于乘以 10^n,其中 n 是我想要保留的数字,从中取出一个整数,然后再次除以相同的值。但这并不完美:在某些情况下,您可能会导致溢出。坦率地说,我更喜欢在服务器上进行更复杂的财务计算,其中我有货币、二进制编码的十进制或类似的数字类型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 toPrecision 返回一个字符串? 的相关文章

  • 如何将选定的元素从 devTools 页面发送到 chrome 侧边栏页面

    我正在开发 chrome devTools 扩展 基本上 我在 元素 面板中添加了一个侧边栏窗格 开发工具 js chrome devtools panels elements createSidebarPane ChromeTrast f
  • 从 JavaScript 加载图像

    在我的专辑幻灯片放映页面上 我有类似的代码 span style display none img src imageUrl span span show loader span in showImage 我确定图像已加载 因此我显示图像并
  • 为什么 IE9+ 上的网络浏览器不支持 document.createEvent 以及如何修复它?

    我使用的是 Windows 8 Internet Explorer 10 Visual Studio 2013 这是 JavaScript 代码 function simulate element eventName var options
  • 无法将消息发布到服务工作人员,因为控制器值为空

    我正在尝试做一个website https secure depths 31934 herokuapp com 在 Service Worker 的帮助下可以离线使用 以缓存页面所需的文件 我试图让用户控制他希望缓存的图像 为此 我使用一个
  • Javascript“this”在 IE 中丢失上下文

    以下在 firefox safari chrome 中工作正常 在 IE 中 this 似乎在 handleEvent 函数中丢失上下文 警报的结果是 object Window 这不是我想要的 当从handleEvent 输出时 this
  • 如何使用标准 JavaScript 在 CSS 转换结束后立即重新启动它?

    我构建了一种密码生成器 只要倒计时到期 它就会显示新密码 不幸的是 我只设法弄清楚如何运行我的代码一次 倒计时由一个简单的 CSS 过渡组成 我想保留它 因为它比我的其他尝试平滑得多 其中我尝试使用 JavaScript 重复更新宽度 va
  • 获取 CRM 2011 中功能区按钮的 ID

    我创建了一个 JavaScript 我想在其中隐藏功能区Reactivate Lead按钮取决于某些条件 我通过在表单上按 F12 获得了按钮的 ID 即lead NoRelationship Form Mscrm Form lead Re
  • 如何从 javascript 错误对象读取错误消息

    有人可以帮我解决以下问题吗 我正在通过 redux 操作进行后调用 如下所示 export const addEmployee firstName surname contactNumber email gt async dispatch
  • Javascript:使用 IIFE 和块语句之间的区别

    IIFE主要用于封装作用域 function let myVar 10 not global 但为什么不直接使用块语句呢 let myVar 10 also not global 除了范围封装之外 进一步使用 IIFE 是否还有其他好处 块
  • CSS 内边框?

    我纯粹用 CSS 创建了左侧的按钮 它是一个div 中的一个div 然而 右侧的三个按钮是background属性于img标签 我这样做是为了按照以下说明模拟翻转效果here http kyleschaeffer com best prac
  • 在 Cordova 中合并文件的多个部分

    在我的 Cordova 应用程序中 我正在下载任意文件 例如图像或视频文件 这是通过 Cordova 文件传输插件和 Range 标头完成的 因为我需要分段下载文件 我的问题是 我想将几 个小 字节 文件合并回原来的文件中 他们曾经在其中使
  • JavaScript 可以检测用户的浏览器是否支持 gzip 吗?

    我可以使用 JavaScript 来检测用户的浏览器是否支持 gzip 压缩内容 客户端 而不是 Node js 或类似内容 我正在尝试支持以下边缘情况 有很多可能的文件可以加载到特定的 Web 应用程序上 最好在应用程序运行时根据需要加载
  • 个人 Tumblr 帖子上的 Javascript

    我知道您可以编辑在 tumblr 博客上呈现所有帖子博客主页的 html AngularJS 但是 有什么办法可以添加自定义到各个帖子 我想在逐个帖子的基础上做一些 javascript 的东西 但似乎无法找到可以编辑代码的位置 或者 如果
  • setTimeout范围问题

    我在控制玩家重生的函数内部定义了一个 setTimeout 我正在创建一个游戏 var player death function this alive false Console log death var timer3 setTimeo
  • 如何防止输入文本中出现“后重音”

    我相信这是一个简单的问题 但在谷歌上搜索几个小时后我找不到任何答案 也许我无法在搜索中使用正确的单词 P 我有一个 javascript 方法 可以防止用户用数字以外的其他字符填充文本框 如下面的代码所示 它在 KeyDown 事件中使用
  • 如何绕过Access-Control-Allow-Origin?

    我正在一个平台上对我自己的服务器进行ajax调用 他们设置了阻止这些ajax调用的平台 但我需要它从我的服务器获取数据以显示从我的服务器数据库检索到的数据 我的 ajax 脚本正在运行 它可以将数据发送到我的服务器的 php 脚本以允许其处
  • 如何在打字稿中使用外部js

    我通过 Typescript 代码生成 Angular JS 代码 在一种情况下 我需要将外部 JS 文件添加到我的打字稿文件中 并且需要访问 js 文件中的类 我像这样添加js文件
  • 使用 nockjs 和 jest 进行 Promise/异步单元测试的代码覆盖率问题

    我使用 NockJS 和 Jest 为 React 应用程序编写了一个简单的 API 调用单元测试 如下所示 AjaxService js export const AjaxService post url data headers gt
  • 如何将项目插入到特定索引处的空数组中?

    我想将一个项目插入到空数组的指定索引中 我看到有 Array prototype splice 方法 但是 如果我在空数组上使用 splice 它只会添加项目来结束数组 如下所示 var a a splice 3 0 item 3 cons
  • 根据文本内容从 jquery 对象中过滤元素

    我正在尝试使用contains带有 this 关键字 但它给出了错误 JS function var check ul find li filter function return this contains two css color r

随机推荐

  • 更改可可中标题栏的颜色

    这个问题肯定有人问过 但谷歌搜索后我仍然找不到答案 如何将标题栏 可以使用关闭 最小化和最大化按钮单击并拖动的标题栏 的颜色更改为与 Cocoa 中默认灰色不同的颜色 如果您设置 纹理 窗口的背景颜色 这一区别在 Snow Leopard
  • For 循环:如何解释更改 ArrayList 大小?

    当 for 循环由 ArrayList 的大小控制时 i lt someArrayList size 但是循环的每次迭代都会向列表中添加一个元素 那么循环如何识别大小正在变化 我认为一旦代码被发送到编译器 它就会看到一次大小 然后执行直到达
  • Android 中两个视图可以同时获得焦点吗

    我有一个 EditText 和一个 popupWindown 其中有一个 ListView 现在我触摸 EditText 弹出窗口显示 我需要这种情况 我可以在 SoftInput 中输入一些内容 并且我还可以单击 ListView 中的子
  • 如何以两种不同的方式为后缀 a++ 和前缀 ++a 重载运算符 ++? [复制]

    这个问题在这里已经有答案了 如何以两种不同的方式为后缀重载运算符 a 和前缀 a 应该看起来像这样 class Number public Number operator prefix Do work on this increment y
  • Django Rest框架自定义Response中间件

    我将 Django Rest Framework 与 rest auth 一起使用 login logout register 我有一个中间件 通常由 user logged in 或 user logged out 信号触发 在我的中间件
  • Rails 中的 find_by_sql,访问结果数组

    我试图在 Rails 中以非常快速和肮脏的方式运行查询 而不将模型的其余部分放在适当的位置 我知道这是不好的做法 但我只需要在紧迫的时间内快速得到结果 直到我找到整个解决方案 我的商品有基于重量的运费 重量存储在商品中 价格存储在表ship
  • 运行可执行文件,然后等待该特定 exe 文件不再运行

    我想运行一个 AHK 可执行文件 然后让 java 等待该可执行文件在其脚本末尾终止它自己的进程 然后继续 是否有一个函数可以监视特定 exe 是否正在运行 如果它正在运行 直到它停止 例如在 AHK 你可以这样做 IfExist Appn
  • 如何使 元素展开或收缩到其父容器?

    目标是拥有
  • 模拟java开发的高CPU负载

    我正在开发一个 Java 应用程序 想看看它如何在较慢 超载的机器上运行 我怀疑可能存在一些线程不安全问题等被忽略 因为我的机器编译得足够快 有没有办法模拟 Java 应用程序的高 CPU 负载 限制可用 CPU 当然 我可以编写一个脚本来
  • C 全局匿名结构/联合

    我有一个 uint64 变量 通常只需要高位或低位 32 位访问 我正在使用 32 位 ARM Cortex M0 为了提高速度 我尝试将 uint64 变量与 C 中的两个 uint32 变量重叠 使用匿名结构 希望避免指针运算来访问成员
  • 如何调整 bash 函数以便省略双引号?

    一整天 我经常输入这样的内容 git stash push u m some phrase as a message 我更愿意输入 stpu some phrase as a message 所以在来自的帮助下这个答案 我在我的中创建了一个
  • 我应该在哪里放置数据库连接字符串以及如何处理连接池?

    我正在开发一个托管在 IIS 服务器上的 asp net 应用程序 要打开连接 我使用 SqlConnection con new SqlConnection Server INLD50045747A SQLEXPRESS Database
  • 加密货币、哈希值和密码问题,完全是菜鸟吗?

    我读过几篇关于这个主题的 stackoverflow 文章 特别是这个 PHP 密码的安全哈希和盐 但我还有一些问题 我需要一些澄清 请告诉我以下陈述是否属实并解释您的评论 如果有人可以访问您的数据库 数据 那么他们仍然需要弄清楚您的哈希算
  • 在 Ubuntu 上找不到 Tkinter 模块

    Python 2 7 1 r271 86832 Apr 11 2011 18 05 24 GCC 4 5 2 on linux2 Type help copyright credits or license for more informa
  • 加载自定义 True Type 字体

    在 Mac Firemonkey 应用程序 Delphi XE7 中 如何加载自定义 TrueType 字体 对于 Windows 我的应用程序安装程序将我的字体添加到 Windows 本身 我已经使用 FPC Lazarus 完成了此操作
  • 如何在搜索时添加加载图标? (Vue.js 2)

    我的组件是这样的
  • 内存对齐的目的

    不可否认 我不明白 假设您有一个内存 其内存字长度为 1 字节 为什么不能在未对齐地址 即不能被 4 整除 上的单次内存访问中访问 4 字节长的变量 就像对齐地址的情况一样 现代处理器上的内存子系统仅限于以其字大小的粒度和对齐方式访问内存
  • 强制 UITableView 滚动到顶部?

    如果 tableview 包含的单元格少于 10 个左右 您将如何强制 UITableViewCell 滚动到顶部 当 tableview 处于编辑模式时 我支持在 tableView 单元格中编辑托管对象上下文 不用说 如果单元格位于表格
  • 使用 for 循环迭代数据集 TF 2.0

    这个问题是关于如何迭代 TF 数据集 因为make initializable iterator 已弃用 我使用以下函数读取数据集 def read dataset new filename target delay ds tf data
  • 为什么 toPrecision 返回一个字符串?

    查看这段代码 function testprecision var isNotNumber parseFloat 1 3 toPrecision 6 alert typeof isNotNumber gt string 我本来预计会有一个数