相关疑难解决方法(0)

为什么浮点数不准确?

为什么有些数字在存储为浮点数时会失去准确性?

例如,十进制数9.2可以精确地表示为两个十进制整数(92/10)的比率,两者都可以用二进制(0b1011100/0b1010)精确表示.但是,存储为浮点数的相同比率永远不会完全等于9.2:

32-bit "single precision" float: 9.19999980926513671875
64-bit "double precision" float: 9.199999999999999289457264239899814128875732421875
Run Code Online (Sandbox Code Playgroud)

这样一个看似简单的数字如何在64位内存中表达"太大" ?

language-agnostic floating-point precision

181
推荐指数
4
解决办法
3万
查看次数

44
推荐指数
3
解决办法
8万
查看次数

在java中使用double时如何删除整数中的".0"?

可能重复:
如何格式化java中的数字?

我在使用Double方面遇到了问题.当结果是整数时,它将显示"1.0",如1.0,2.0.

任何人都可以帮我如何删除整数的.0?

java double android

22
推荐指数
3
解决办法
5万
查看次数

Python Scientific Notation精确标准化

我的目标是简单地将诸如"1.2"的字符串转换为科学记数法而不增加额外的精度.问题是我总是在输出结束时得到多余的0.

>>> input = "1.2"
>>> print '{:e}'.format(float(input))
1.200000e+00
Run Code Online (Sandbox Code Playgroud)

我正在试图找出如何获得公正1.2e+00.我意识到我可以在我的格式语句中指定精度,但我不想不必要地截断更长的字符串.我只是想压制训练0.

我尝试过使用Decimal.normalize(),它适用于所有情况,除了e <2.

>>> print Decimal("1.2000e+4").normalize()
1.2E+4
>>> print Decimal("1.2000e+1").normalize()
12
Run Code Online (Sandbox Code Playgroud)

所以这更好,除了我不想要12,我想要1.2e + 1.:P

任何建议将不胜感激!

编辑: 为了澄清,输入值已经适当地舍入到预定长度,现在是未知的.我试图避免重新计算适当的格式精度.

基本上,我可以输入值"1.23"和"1234.56",它应该是"1.23e + 0"和"1.23456e + 3".

我可能只需要检查输入字符串的长度并使用它来手动指定精度,但我想检查并确保我没有遗漏可以阻止指数格式任意添加0的东西.

python format notation exponential

19
推荐指数
2
解决办法
3万
查看次数

格式化一个double以省略不必要的".0"并且永远不会四舍五入

我知道如何格式化double以仅保留可用的小数位(DP),最多只能保留一定数量的DP.此示例最多可保留4个DP.

    double d = 1.0;
    DecimalFormat df = new DecimalFormat("#.####");
    System.out.print(df.format(d)); // returns "1"

    double d = 1.23;
    DecimalFormat df = new DecimalFormat("#.####");
    System.out.print(df.format(d)); // returns "1.23"

    double d = 1.2345678;
    DecimalFormat df = new DecimalFormat("#.####");
    System.out.print(df.format(d)); // returns "1.2346", rounding off: bad!
Run Code Online (Sandbox Code Playgroud)

现在我想要整数,例如1.0"1"没有必要的情况下返回.0,#格式字符确实提供了该功能.但是我该如何确保数字永远不会变圆呢?是否有任何其他的方式比任意长的链其他#"#.###########################################"

或者我应该使用double到string的默认转换,并截断".0"它在结尾处是否出现:

    String s = "" + d;
    if(s.substring(s.length()-2).equals(".0")) {
        s=s.substring(0, s.length()-2);
    }
Run Code Online (Sandbox Code Playgroud)

这两种方式看起来都非常笨拙.

java string-formatting

9
推荐指数
1
解决办法
1万
查看次数

如何从java中包含.0的浮点数中删除小数部分

我只想删除包含.0的浮点数的小数部分.所有其他数字都可以接受..例如:

  I/P: 1.0, 2.2, 88.0, 3.56666, 4.1, 45.00 , 99.560
  O/P: 1 ,  2.2, 88,   3.567,   4.1, 45 ,    99.560
Run Code Online (Sandbox Code Playgroud)

有没有任何方法可以做到这一点,除了 " 比较数字与".0"并采取子串 "?

编辑:我不想要ACTING FLOAT NUMBERs(比如1.0,2.0只不过是1对吗?)

我觉得我的问题有点令人困惑......
这是我的澄清:我只想向用户显示一系列浮点数.如果数字的小数部分为零,则仅显示整数部分,否则按原样显示数字.我希望现在很清楚..

java android

9
推荐指数
3
解决办法
2万
查看次数

如何删除String值中的尾随零并删除小数点

如果字符串在小数点后仅包含零,如何删除字符串值中的尾随零并删除小数点?我正在使用以下代码:

String string1 = Double.valueOf(a).toString()
Run Code Online (Sandbox Code Playgroud)

这将删除(10.10和10.2270)中的尾随零,但我没有获得第一和第二输入的预期结果.

输入

10.0
10.00
10.10
10.2270
Run Code Online (Sandbox Code Playgroud)

预期产出

10
10
10.1
10.227
Run Code Online (Sandbox Code Playgroud)

java string double int

9
推荐指数
2
解决办法
1万
查看次数

从double中删除尾随零

我想删除所有尾随零而不截断或舍入数字,如果它没有任何.例如,数字可能类似12.0,在这种情况下,应删除尾随零.但这个数字也可能是一种几乎不合理的东西,比如12.9845927346958762...继续走到屏幕的边缘.有没有办法设置DecimalFormat或其他类来剪切尾随零,同时保持非理性完整?

java double decimalformat

8
推荐指数
3
解决办法
2万
查看次数

浮动精密显示器(Android)

我正在尝试制作一个程序,它需要一些用户输入,运行一些计算并输出答案.我的问题是,这个答案有时会长很多小数位,导致一些美学和布局问题.我只需要显示4位小数的数据.无论如何,在输出时限制这些数字的精度?(数字存储在浮点数中,我正在为Android编程.)

floating-point precision android

6
推荐指数
1
解决办法
2万
查看次数

DecimalFormat - 保留所有十进制数

我正在使用DecimalFormat将双精度格式化为String.然后将此String集成到我的表示层中.

  • 问题:我想保留所有小数.示例:"12345678.123456789"
  • 问题:我应该使用什么格式?
  • 备注:我使用不同的Locale来支持多种布局.

格式: ### - >这将使用所有的数字之前小数点,但张学波数字的小数点.

我可以使用#.#########作为大小数,但是如果小数更长的话怎么办?

我发现我的小测试程序很有用,并希望与您分享.

你能帮我显示所有小数吗?

package be.softwarelab.numbers;

import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.Locale;

public class DecimalNumbersTest {

    private static final double NUMBER = 123456789.123456789;

    public static void main(String[] args) {

        String format01 = "#.";
        String format02 = "#.#";
        String format03 = "#.##";
        String format04 = "#.###";
        String format05 = "#.####"; 

        System.out.println("====== NUMBER ===== USA =====================================");
        showResult(NUMBER, format01, Locale.US);
        showResult(NUMBER, format02, …
Run Code Online (Sandbox Code Playgroud)

java numbers decimalformat

6
推荐指数
1
解决办法
1493
查看次数