我有一个原始浮点数,需要作为原始双数。简单地将浮标转换为两倍会给我带来额外的精度。例如:
float temp = 14009.35F;
System.out.println(Float.toString(temp)); // Prints 14009.35
System.out.println(Double.toString((double)temp)); // Prints 14009.349609375
但是,如果我不是强制类型转换,而是将浮点数输出为字符串,然后将字符串解析为双精度,那么我将得到所需的内容:
System.out.println(Double.toString(Double.parseDouble(Float.toString(temp))));
// Prints 14009.35
有没有比Stringhtml" target="_blank">返回更好的方法了?
这并不是说你实际上获得了更高的精度-而是浮标没有准确地代表你最初瞄准的数字。双被精确地表示原始浮子; toString
显示的是已经存在的“额外”数据。
例如(假设这些数字不正确,我只是在编造东西),假设你有:
float f = 0.1F;
double d = f;
则值f可能恰好是0.100000234523。d
将具有完全相同的值,但是当你将其转换为字符串时,它将“信任”精度更高的精度,因此不会尽早进行四舍五入,并且你会看到“多余的数字”在那里,但是对你隐藏。
当你转换为字符串并返回时,最终将得到一个比原始浮点数更接近字符串值的双精度值-但这仅在你真的相信字符串值是你真正想要的值时才有用。
你确定float / double是此处使用的合适类型,而不是BigDecimal
?如果你尝试使用具有精确十进制值的数字(例如,货币),则BigDecimal
是更合适的IMO类型。
我有下面的抓耳挠腮,演示在和这里 两个版本中的简单编译类中都会发生相同的情况 尽管17警告不再需要 JLS在第5.1节中说明了这一点。2. 14年,在项目清单之后,它包含以下内容 根据我的阅读,这是实现中的错误?我发现执行此转换的唯一可靠方法是。
问题内容: 变量的每个可能值都可以准确地用变量表示吗? 换句话说,对于所有可能的值,以下操作将成功: 我怀疑没有例外,或者只有例外情况(例如+/-无限或NaN)。 编辑 :问题的原始措词令人困惑(陈述了两种方式,一种回答是“否”,另一种回答是是)。我将其改写为与问题标题匹配的单词。 问题答案: 是。 通过列举所有可能的情况来证明: 在我的机器上在12秒内完成。32位 很小 。
问题内容: 甲 字符串 一个的表示 双 写入和从由文件读 C# 应用。 C#应用程序使用以下片段将双精度型转换为字符串: C#应用程序使用以下片段将字符串转换为双精度型 如果要在 Java 应用程序中写入和读取同一文件,您将如何转换类型而不丢失数据? 问题答案: 我相信,只要使用就可以并且不会丢失数据。特别是从docs中获取: m或a的小数部分必须打印多少个数字?必须至少有一位数字来表示小数部分,
问题内容: 我有一个浮点数组,我想将其转换为Java中的双精度数组。我知道迭代数组并创建一个新数组的明显方法。我希望Java在希望与double []一起工作的地方能够平稳地消化float [] …,但不能与此一起工作。进行这种转换的优雅,有效的方法是什么? 问题答案: 基本上 , 必须进行每个值的转换。两种数组类型之间没有隐式转换,因为在JITting之后用于处理它们的代码将有所不同- 它们具有
问题内容: 我有这个问题,我必须将公里转换成英里。我是一个新手程序员,所以请耐心等待。 到目前为止,这是我的代码: 它给我一个错误,说: 问题答案: 您正在尝试将a 设置为变量 要修复,请更改此行 至
问题内容: 有点像这个问题,但是相反。 给定类似,或的字符串,将其转换为浮点数的最佳方法是什么?我正在考虑根据情况使用正则表达式,但是也许有人知道更好的方法或预先存在的解决方案。我希望可以使用,但是我认为第3种情况可以避免这种情况。 问题答案: 我稍微调整了詹姆斯的回答。 http://ideone.com/ItifKv