【问题标题】:Kotlin float number with 2 decimals to string without precision lossKotlin 浮点数,带 2 位小数到字符串,没有精度损失
【发布时间】:2020-03-06 13:07:43
【问题描述】:

在 Android-Kotlin 中,我从后端获取浮点数(例如 num = 10000000.47) 当我尝试对其进行 String.format 并将该数字添加到我的 balanceTextview 中时,它会以指数显示它(类似于 1.0E10)。

我想正常显示没有指数和 2 位小数的数字。 (没有精度损失!)

尝试使用 DecimalFormat("#.##") 但它没有帮助我。也许我做错了什么?

num = 10000000.47f
 val dec = DecimalFormat("#.##")
 var result = dec.format(num)

my result is: 10000000
It losts my decimal places

【问题讨论】:

  • 你能告诉我们你是怎么尝试的吗?我们确实需要查看代码才能提供帮助...
  • amount 是什么?不应该是num吗?
  • 是的,我的错我刚刚改正了

标签: android kotlin


【解决方案1】:

问题在于您的号码类型。根据documentation

对于用小数初始化的变量,编译器会推断出 Double 类型。要显式指定值的浮点类型,请添加后缀 f 或 F。如果此类值包含超过 6-7 位十进制数字,则会进行四舍五入。

举个例子说明信息是如何丢失的:

val pi = 3.14 // Double
val e = 2.7182818284 // Double
val eFloat = 2.7182818284f // Float, actual value is 2.7182817

如果值被指定为Double而不是Float,即

val num = 10000000.47

而不是

val num = 10000000.47f

那么您的方法按预期工作,但可以缩短为:

"%.2f".format(num)

(请注意,较短的版本也会将“100”打印为“100.00”,这与您的方法不同,但可能仍然是理想的行为)

如果您从后端收到Float,则您的信息已经丢失。否则,您应该能够通过改进解析来解决问题。

【讨论】:

  • 我从后端获取数字,它是浮点数
  • 由于print(num) 已经显示了小数点的丢失,我认为你可能不走运。
  • 你的意思是我无法解决这个问题?
  • 你到底是怎么得到这个号码的?作为 JSON 号码?作为 JSON 字符串?作为...?
猜你喜欢
  • 2016-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-09
  • 1970-01-01
  • 2010-12-07
  • 1970-01-01
  • 2015-05-25
相关资源
最近更新 更多