【问题标题】:How to remove scientific notation from double for longest double value如何从 double 中删除科学记数法以获得最长的 double 值
【发布时间】:2018-05-28 07:41:36
【问题描述】:

我在 Double 值操作中遇到问题。

让我们来,

Double d = new Double(123456789987654321123456789d);
System.out.println(d);

输出是:

1.2345678912345678E35

但我想要,

123456789987654321123456789

没有任何符号的完整数字。

我已经尝试了所有使用BigDecimalBigInteger 等的排列。

注意:我想填充到 JSON 中,所以请不要只建议 print 声明。

我已经阅读了:

【问题讨论】:

  • 旁注:这里不需要使用new
  • 另一个旁注:JSON 确实支持数字的科学记数法。
  • 你可以省略Double构造函数
  • 我将此标记为与其中一个链接问题的重复,然后撤回;因为这个数字的顺序是 2^86,所以后面的数字会被截断为常规的双精度数。

标签: java double


【解决方案1】:

试试这个BigDecimal::toPlainString:

BigDecimal d = new BigDecimal("123456789987654321123456789");
String result = d.toPlainString();

d 的输出是:

123456789987654321123456789

要填充到 JSon 有很多方法,我不确定你到底想要什么,但也许这可以帮助你 How to create JSON Object using String?:

BigDecimal d = new BigDecimal("123456789987654321123456789");

JSONObject myObject = new JSONObject();
myObject.put("number", d.toPlainString());

【讨论】:

  • 注意:我想填充到 JSON 中,所以请不要只建议打印语句
  • @Lino 使用该值填充 JSON 取决于 OP 使用的 JSON 库。由于 OP 没有分享任何相关信息,我们无法就如何将此值添加到 JSON 对象给他一个很好的答案。
  • @BackSlash 你是对的。 @YCF_L 也许您还可以提供一个将double 作为参数而不是String 的解决方案。因为这可能是 OP 的用例
  • @YCF_L 不完全是,但仍然有用!我的意思是从 double 中创建 Bigdecimal 的方法
  • @Lino 你有解决办法吗?我看不出这种方式的问题在哪里
【解决方案2】:

你可以试试这个

String str = String.format("%.0f", d);

请注意,double 可以容纳的最大位数约为 17,因此 123456789987654321123456789 将四舍五入

【讨论】:

    猜你喜欢
    • 2013-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 2016-08-28
    • 1970-01-01
    相关资源
    最近更新 更多