Flink实时计算时避免结果为科学计数法

 在flink计算过程中,数据量一大,就会出现科学计数法的表示方式,但有时候我们又要避免科学计数法的展示,一下是我的一个小例子

 var total:Double = 0
    row_stream.process( new ProcessFunction[Row, Double] {

      override def processElement(i: Row, context: ProcessFunction[Row, Double]#Context, collector: Collector[Double]): Unit = {

        total = total + (i.getFieldAs[Int]("product_cnt") * i.getFieldAs[Double]("product_price"))
        collector.collect(total)
      }
    } ).addSink(new RedisSink[Double](conf, new MyRedis))

上述代码写入redis中并用redis-cli查询时会出现科学计数法

127.0.0.1:6379> get totalprice
"5.015750414999975E7"

我们可以用到java.text.DecimalFormat


import java.text.DecimalFormat

object Main {
  def main(args: Array[String]): Unit = {
    val decimalFormat = new DecimalFormat("#.##") // 指定格式
    val value = 123456789.123456789 
    val resValue = decimalFormat.format(value) // 格式化
  }
}

其中,"#.##" 表示保留两位小数,该方法的更多详细内容可以看这篇Java 详解数字格式化(NumberFormat&DecimalFormat)-CSDN博客

把该方法运用到上述代码中,问题解决

127.0.0.1:6379> get totalprice
"51685600.87"

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Zyoy大数据机器学习

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值