查找 BigDecimal 中有效位数的好方法?

2023-11-22

我不想限制 BigDecimal 中的有效位数。我只想找到该数字的有效位数。

有没有办法做到这一点而不将数字转换为字符串并计算字符数?


我相信你想要一个组合stripTrailingZeros, precision and scale,如下所示:

import java.math.*;

public class Test {

    public static void main(String[] args) {
        test("5000");      // 4
        test("5000.00");   // 4
        test("5000.12");   // 6
        test("35000");     // 5
        test("35000.00");  // 5
        test("35000.12");  // 7
        test("35000.120"); // 7
        test("0.0034");    // 2
        test("1.0034");    // 5
        test("1.00340");   // 5
    }


    private static void test(String input) {
        System.out.println(input + " => " +
            significantDigits(new BigDecimal(input)));
    }

    private static int significantDigits(BigDecimal input) {
        input = input.stripTrailingZeros();
        return input.scale() < 0
            ? input.precision() - input.scale()
            : input.precision(); 
    }
}

致电给stripTrailingZeros是必需的,否则完全有可能BigDecimal以“非标准化”形式存储。例如,new BigDecimal(5000)精度为 4,而不是 1。

致电给scale()用于处理规范化形式有尾随零的情况before小数点,但什么也没有after小数点。在这种情况下,小数位数将始终为负数,并指示尾随零的数量。

编辑:带有尾随零但没有小数点的情况本质上是不明确的 - 例如,“5000”没有明确的有效数字位数。上面的代码将小数点之前的所有尾随零视为有效。

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

查找 BigDecimal 中有效位数的好方法? 的相关文章

随机推荐

  • 为什么 Web 服务返回数据为 msg.d

    我发现我的网络方法返回的数据为 d id 1 itemtxt Masters id 2 itemtxt Transactions id 3 itemtxt Misch Reports 如果您注意到 该数组被命名为 d 这是为什么 有什么规定
  • pyenv:构建失败(Fedora 34 使用 python-build 20180424)

    我需要帮助通过 pyenv 安装 python pyenv v pyenv 1 2 27 我尝试安装3 6 8版本 pyenv install 3 6 8 我收到错误 正在下载 Python 3 6 8 tar xz gt https ww
  • 在匿名函数中测试 JavaScript 函数

    是否可以测试myInnerFunction below var val function var myInnerfunction function input return input I ADDED THIS return myInner
  • PHP:7 PDO fetch(All) 尝试将类型转换为关联类型

    今天我发现我们的代码似乎与 PDO 的更改向后不兼容 在 PHP PDOStatement通过其职能fetch and fetchAll返回其值为字符串或 null 的行 我们的代码依赖于这个属性 不久前我们更新到了 PHP 7 事实证明
  • 从 C# 中的行中提取 GUID

    我尝试使用 IndexOf 来简化一些遗留代码 以从行中检索 GUID 我可以进一步简化下面的代码以摆脱使用 guids Any 和 guids First 吗 Code using regular expression private s
  • 使用 + 和 - 符号格式化数字

    我在堆栈面板中有一些 WPF 文本块 我想要对其进行数据绑定和格式化 例如 以下格式为不带秒部分的日期 24 小时格式
  • 是否有任何指定数字功能的特征?

    我想使用一个特征来绑定一个通用类型 就像这个假设的HasSQRT fn some generic function
  • 我应该对 POST 数据进行 URL 编码吗?

    我正在将数据发布到外部 API 使用 PHP 如果相关的话 我应该对传递的 POST 变量进行 URL 编码吗 或者我只需要对 GET 数据进行 URL 编码 更新 这是我的 PHP 以防相关 fields array mediauploa
  • 与 Typescript Readonly 类型不一致

    我遇到了与 Typescript 不一致的问题Readonly我不明白 Typescript v3 9 2 playground here interface Thing name string interface Obj arr Thin
  • MySQL 全文搜索和 SOUNDEX

    我正在尝试使用全文搜索和 SOUNDEX 来实现名字和姓氏搜索 以防名字拼写错误 我试图做类似的事情 SELECT FROM employees WHERE MATCH SOUNDEX first name last name AGAINS
  • SwiftUI 和 UICloudSharingController 互相讨厌

    我有一个使用 SwiftUI 的项目 需要 CloudKit 共享 但我无法获取UICloudSharingController在 SwiftUI 环境中发挥出色 第一个问题 一个简单的包装UICloudSharingController
  • JAXB 和抽象类

    我尝试使用 JAXB 来解组一些 XML 但出现 无法创建 的实例 异常 我明白为什么 它试图创建一个抽象类的实例 我想要的是让它创建一个特定实现类的实例 我的目标是对 setter 方法进行特定于类的检查 也许 qux 是 BarImpl
  • mongo 导出语法错误:缺少;声明之前 @(shell):1:14

    您好 我正在尝试使用此命令行导出我的 mongodb 集合之一 mongoexport host 127 0 0 1 port 3001 db meteor collection subs out subs json 但我收到此错误 我不明
  • Code-Golf:一行 PHP 语法

    Locked 这个问题及其答案是locked因为这个问题是题外话 但却具有历史意义 目前不接受新的答案或互动 解释 PHP 的语法存在一些漏洞 在开发过程中程序员偶尔会介入这些漏洞 这可能会导致很多挫败感 因为这些语法漏洞似乎无缘无故地存在
  • 如何使用 Spring 以编程方式使用 Rest API 中的文件?

    我有以下 Rest 资源 它从数据库下载文件 它在浏览器中工作正常 但是 当我尝试从 Java 客户端执行如下操作时 我收到 406 未接受错误 RequestMapping value download name method Reque
  • Sqlite 具有真正的“全文搜索”和拼写错误(FTS+spellfix 一起)

    假设我们有 100 万行 如下所示 import sqlite3 db sqlite3 connect memory c db cursor c execute CREATE TABLE mytable id integer descrip
  • 带描边的矩形,缩放时描边线变形错误

    我从这个网站和这里的贡献者那里得到了很多帮助 谢谢 现在我有一个关于 Fabric js 中带有笔划的矩形的问题 因为我用它作为图像和文本的占位符 当我缩放它时 边框线宽度也被缩放 我认为这是一个我想要的问题保持边框宽度不变 var can
  • 如何获得图像的分辨率? (JPEG、GIF、PNG、JPG)

    我找到了这个方法 Graphics g e Graphics Bitmap bmp new Bitmap winter jpg g DrawImage bmp 0 0 Console WriteLine Screen resolution
  • GroupBy 将多个组作为层次结构

    我正在使用 GroupBy 创建一组分层组以在多个子网格中使用 假设我有一个包含 6 列的查询 a b c d e f 现在 我需要按 a 分组 然后按 b 分组 然后按 c 分组 并返回 c 组中的整行 var q rows GroupB
  • 查找 BigDecimal 中有效位数的好方法?

    我不想限制 BigDecimal 中的有效位数 我只想找到该数字的有效位数 有没有办法做到这一点而不将数字转换为字符串并计算字符数 我相信你想要一个组合stripTrailingZeros precision and scale 如下所示