将 NumberFormat.parse() 的结果转换为 BigDecimal
Converting the result of NumberFormat.parse() into a BigDecimal
我定义了一个 formatter
像这样:
>>> import java.text.NumberFormat
>>> val formatter = NumberFormat.getInstance()
看起来 formatter.parse("1,000")
的结果是 Long
:
>>> formatter.parse("1,000")::class
class kotlin.Long
但是,如果我尝试将它传递给 BigDecimal
的构造函数,我会收到一条错误消息,指出它不匹配任何构造函数:
>>> BigDecimal(formatter.parse("1,000"))
error: none of the following functions can be called with the arguments supplied:
public constructor BigDecimal(p0: BigInteger!) defined in java.math.BigDecimal
public constructor BigDecimal(p0: CharArray!) defined in java.math.BigDecimal
public constructor BigDecimal(p0: Double) defined in java.math.BigDecimal
public constructor BigDecimal(p0: Int) defined in java.math.BigDecimal
public constructor BigDecimal(p0: Long) defined in java.math.BigDecimal
public constructor BigDecimal(p0: String!) defined in java.math.BigDecimal
BigDecimal(formatter.parse("1,000"))
^
尽管如此
>>> formatter.parse("1,000") == 1000L
true
知道我做错了什么吗?
在科特林中
formatter.parse("1,000") //this result in not Long.Its is Number
所以你必须转换为 Long
fun main()
{
val formatter = NumberFormat.getInstance()
val result:Number=formatter.parse("1,000")
val decimal=BigDecimal(result.toLong())
println(decimal) //out put is 1000
}
您需要先将您的值转换为 Long,然后再将其传递给 BigDecimal
构造函数,因为它是一个 Number
。您可以使用 .toLong()
或为 Number
创建一个扩展函数,其中 returns BigDecimal:
fun Number.bigDecimialValue(): BigDecimal = BigDecimal(this.toLong())
我定义了一个 formatter
像这样:
>>> import java.text.NumberFormat
>>> val formatter = NumberFormat.getInstance()
看起来 formatter.parse("1,000")
的结果是 Long
:
>>> formatter.parse("1,000")::class
class kotlin.Long
但是,如果我尝试将它传递给 BigDecimal
的构造函数,我会收到一条错误消息,指出它不匹配任何构造函数:
>>> BigDecimal(formatter.parse("1,000"))
error: none of the following functions can be called with the arguments supplied:
public constructor BigDecimal(p0: BigInteger!) defined in java.math.BigDecimal
public constructor BigDecimal(p0: CharArray!) defined in java.math.BigDecimal
public constructor BigDecimal(p0: Double) defined in java.math.BigDecimal
public constructor BigDecimal(p0: Int) defined in java.math.BigDecimal
public constructor BigDecimal(p0: Long) defined in java.math.BigDecimal
public constructor BigDecimal(p0: String!) defined in java.math.BigDecimal
BigDecimal(formatter.parse("1,000"))
^
尽管如此
>>> formatter.parse("1,000") == 1000L
true
知道我做错了什么吗?
在科特林中
formatter.parse("1,000") //this result in not Long.Its is Number
所以你必须转换为 Long
fun main()
{
val formatter = NumberFormat.getInstance()
val result:Number=formatter.parse("1,000")
val decimal=BigDecimal(result.toLong())
println(decimal) //out put is 1000
}
您需要先将您的值转换为 Long,然后再将其传递给 BigDecimal
构造函数,因为它是一个 Number
。您可以使用 .toLong()
或为 Number
创建一个扩展函数,其中 returns BigDecimal:
fun Number.bigDecimialValue(): BigDecimal = BigDecimal(this.toLong())