我如何转换为 double .dart

How i can convert to double .dart

我这段代码有问题,这段代码无法执行。这是代码:

import 'dart:io';

main() {
  print("CALCULATOR");

  stdout.write("Number a: ");
  double a = double.parse(stdin.readLineSync());
  stdout.write("Number b: ");
  double b = double.parse(stdin.readLineSync());

  double result;

  // operator +
  result = a + b;
  print("$a + $b = $result");

  // operator -
  result = a - b;
  print("$a - $b = $result");

  // operator *
  result = a * b;
  print("$a * $b = $hasil");

  // operator /
  result = a / b;
  print("$a / $b = $result");

  // operator %
  result = a % b;
  print("$a % $b = $result");

}

这是我的问题:

myLearning/myNote/test.dart:7:33: Error: The argument type 'String?' can't be assigned to the parameter type 'String' because 'String?' is nullable and 'String' isn't.
double a = double.parse(stdin.readLineSync());
                            ^
myLearning/myNote/test.dart:9:33: Error: The argument type 'String?' can't be assigned to the parameter type 'String' because 'String?' is nullable and 'String' isn't.
double b = double.parse(stdin.readLineSync());

我只是想如果我输入一个数字,结果将是这样的:

CALCULATOR
Number a : 9
Number b : 2
9.0 + 2.0 = 11.0
9.0 - 2.0 = 7.0
9.0 * 2.0 = 18.0
9.0 / 2.0 = 4.5
9.0 % 2.0 = 1.0

我能得到像上面那样的输入吗?

您的“问题”是您使用的是 Dart 2.12 的测试版,它启用了不可为空的功能。此功能将帮助您确保了解可能出现空值的所有情况。在您的情况下,它是对 stdin.readLineSync():

的调用

Returns null if no bytes preceded the end of input.

你得到一个错误,因为 double.parse 接受一个 String 作为参数,但是 stdin.readLineSync() 返回 String?,它是一个可以是 [=13= 的类型] 或 null(其中 String 只允许 String,永远不能是 null)。

简单的解决方法是执行以下操作并在 readLineSync() 之后插入 !:

import 'dart:io';

void main() {
  print("CALCULATOR");

  stdout.write("Number a: ");
  double a = double.parse(stdin.readLineSync()!);
  stdout.write("Number b: ");
  double b = double.parse(stdin.readLineSync()!);

  double result;

  // operator +
  result = a + b;
  print("$a + $b = $result");

  // operator -
  result = a - b;
  print("$a - $b = $result");

  // operator *
  result = a * b;
  print("$a * $b = $result");

  // operator /
  result = a / b;
  print("$a / $b = $result");

  // operator %
  result = a % b;
  print("$a % $b = $result");
}

通过执行 !,您告诉 Dart 您确定该值不为 null,分析器应该只接受该值,就好像它永远不会 null.

在运行时,如果 stdin.readLineSync() 的返回值是 null,Dart 将为 null 添加运行时检查并使程序崩溃(使用 NullPointerException)。但是因为我们正在开发一个小示例程序,所以这很好。

您可以在此处阅读有关默认情况下非空 (NNBD) 的更多信息:https://dart.dev/null-safety