当前位置: 首页 > news >正文

C#,JavaScript实现浮点数格式化自动保留合适的小数位数

目标

    由于浮点数有漂移问题,转成字符串时 3.6 有可能得到 3.6000000000001,总之很长的一串,通常需要截取,但按照固定长度截取不一定能使用各种情况,如果能根据数值大小保留有效位数就好了。

C#实现

    我们可以在基础库里增加一个扩展类,给double, float 一个ToFixed 扩展方法,注意该类不要有命名空间,否则调用时还要加上 using 才能找到。

using System;public static class DoubleExtensions
{public static string ToFixed(this double d, int accLen = 3){return toFixed(d, accLen);}public static string ToFixed(this float d, int accLen = 3){return toFixed(d, accLen);}private static string toFixed(double d, int accLen){var abs = Math.Abs(d);if (abs == 0) return "0";int fixedlen = accLen - (int)Math.Log10(abs);fixedlen = Math.Max(0, fixedlen);return d.ToString($"F{fixedlen}");}
}

JavaScript实现

    实现思路相同,需要的话可以封装一下再用。

var fixedlen = 0;
if (Math.abs(value) < 1000 && value !== 0)fixedlen = 3 - Math.log(Math.abs(value)) / Math.LN10;
value = value.toFixed(fixedlen);

测试结果

相关文章:

  • Flutter 中的 SliverLayoutBuilder 小部件:全面指南
  • Flutter:革新移动开发的开源框架
  • Android 图表开发开源库 MPAndroidChart 使用总结
  • C++面试题其二
  • 学习小心意——python的构造方法和析构方法
  • Configure Google Chrome Settings with Group Policy
  • B端UI设计,演绎高情逸态之妙
  • 生物制药企业选择谷歌云的理由有哪些?
  • PCIe的链路状态
  • Linux 内核之 mmap 内存映射触发的缺页异常 Page Fault
  • HTTP 的三次握手
  • 【MATLAB高级编程】入门篇 | 向量化编程
  • 【并发程序设计】11.进程间通信
  • 如何利用CXL技术突破内存墙?-2
  • 打造你的专属Vue组件:超实用“Descriptions展示组件开发”实战
  • iOS 颜色设置看我就够了
  • js算法-归并排序(merge_sort)
  • PAT A1017 优先队列
  • 给新手的新浪微博 SDK 集成教程【一】
  • 利用DataURL技术在网页上显示图片
  • 聊聊sentinel的DegradeSlot
  • 判断客户端类型,Android,iOS,PC
  • 想使用 MongoDB ,你应该了解这8个方面!
  • kubernetes资源对象--ingress
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • #### golang中【堆】的使用及底层 ####
  • #Datawhale AI夏令营第4期#多模态大模型复盘
  • $GOPATH/go.mod exists but should not goland
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (70min)字节暑假实习二面(已挂)
  • (iPhone/iPad开发)在UIWebView中自定义菜单栏
  • (poj1.2.1)1970(筛选法模拟)
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (十一)c52学习之旅-动态数码管
  • (一)Spring Cloud 直击微服务作用、架构应用、hystrix降级
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • (转)shell调试方法
  • *算法训练(leetcode)第三十九天 | 115. 不同的子序列、583. 两个字符串的删除操作、72. 编辑距离
  • . Flume面试题
  • .NET BackgroundWorker
  • .net core 连接数据库,通过数据库生成Modell
  • .NET 直连SAP HANA数据库
  • .NET 中让 Task 支持带超时的异步等待
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET/C# 避免调试器不小心提前计算本应延迟计算的值
  • .NET连接数据库方式
  • .NET文档生成工具ADB使用图文教程
  • /bin/bash^M: bad interpreter: No such file or directory
  • @ 代码随想录算法训练营第8周(C语言)|Day57(动态规划)
  • @31省区市高考时间表来了,祝考试成功
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • @Repository 注解